LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAogKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAqIG1vcmUgZGV0YWlscy4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgojaWZuZGVmCV9fSEFMRE1PVVRTUkNfSF9fCiNkZWZpbmUgX19IQUxETU9VVFNSQ19IX18KCi8qICBEZWZpbml0aW9uICovCi8qICBEZWZpbmUgYWxsIHRlYW0gc3VwcG9ydCBhYmlsaXR5LiAqLwoKLyogIERlZmluZSBmb3IgYWxsIHRlYW1zLiBQbGVhc2UgRGVmaW5lIHRoZSBjb25zdGFudCBpbiB5b3VyIHByZWNvbXAgaGVhZGVyLiAqLwoKLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9BUAkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9BRFNMCQkJMCAqLwovKiBkZWZpbmUJCURNX09ETV9TVVBQT1JUX0NFCQkJMCAqLwovKiBkZWZpbmUJCURNX09ETV9TVVBQT1JUX01QCQkJMSAqLwoKLyogIERlZmluZSBPRE0gU1cgdGVhbSBzdXBwb3J0IGZsYWcuICovCgovKiAgQW50ZW5uYSBTd2l0Y2ggUmVsYXRpdmUgRGVmaW5pdGlvbi4gKi8KCi8qICBBZGQgbmV3IGZ1bmN0aW9uIFN3QW50RGl2Q2hlY2s4MTkyQygpLiAqLwovKiAgVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiBvZiBBbnRlbm5hIGRpdmVyc2l0eSBmdW5jdGlvbiBiZWZvcmUgbGluay4gKi8KLyogIE1haW5seSwgaXQganVzdCByZXRhaW5zIGxhc3Qgc2NhbiByZXN1bHQgYW5kIHNjYW4gYWdhaW4uICovCi8qICBBZnRlciB0aGF0LCBpdCBjb21wYXJlcyB0aGUgc2NhbiByZXN1bHQgdG8gc2VlIHdoaWNoIG9uZSBnZXRzIGJldHRlcgogKiAgUlNTSS4gSXQgc2VsZWN0cyBhbnRlbm5hIHdpdGggYmV0dGVyIHJlY2VpdmluZyBwb3dlciBhbmQgcmV0dXJucyBiZXR0ZXIKICogIHNjYW4gcmVzdWx0LiAqLwoKI2RlZmluZQlUUF9NT0RFCQkJMAojZGVmaW5lCVJTU0lfTU9ERQkJMQojZGVmaW5lCVRSQUZGSUNfTE9XCQkwCiNkZWZpbmUJVFJBRkZJQ19ISUdICQkxCgovKiAzIFR4IFBvd2VyIFRyYWNraW5nICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZQkJRFBLX0RFTFRBX01BUFBJTkdfTlVNCTEzCiNkZWZpbmUJCWluZGV4X21hcHBpbmdfSFBfTlVNCTE1CgoKLyogICovCi8qIDMgUFNEIEhhbmRsZXIgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKI2RlZmluZQlBRkhfUFNECQkxCS8qIDA6bm9ybWFsIFBTRCBzY2FuLCAxOiBvbmx5IGRvIDIwIHB0cyBQU0QgKi8KI2RlZmluZQlNT0RFXzQwTQkwCS8qIDA6MjBNLCAxOjQwTSAqLwojZGVmaW5lCVBTRF9USDIJCTMKI2RlZmluZQlQU0RfQ0hNCQkyMCAgIC8qICBNaW5pbXVtIGNoYW5uZWwgbnVtYmVyIGZvciBCVCBBRkggKi8KI2RlZmluZQlTSVJfU1RFUF9TSVpFCTMKI2RlZmluZSBTbW9vdGhfU2l6ZV8xCTUKI2RlZmluZQlTbW9vdGhfVEhfMQkzCiNkZWZpbmUgU21vb3RoX1NpemVfMgkxMAojZGVmaW5lCVNtb290aF9USF8yCTQKI2RlZmluZSBTbW9vdGhfU2l6ZV8zCTIwCiNkZWZpbmUJU21vb3RoX1RIXzMJNAojZGVmaW5lIFNtb290aF9TdGVwX1NpemUgNQojZGVmaW5lCUFkYXB0aXZlX1NJUgkxCiNkZWZpbmUJUFNEX1JFU0NBTgk0CiNkZWZpbmUJUFNEX1NDQU5fSU5URVJWQUwJNzAwIC8qIG1zICovCgovKiA4NzIzQSBIaWdoIFBvd2VyIElHSSBTZXR0aW5nICovCiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORAkweDIyCiNkZWZpbmUgRE1fRElHX0dtb2RlX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORCAweDI4CiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX1RIUkVTSE9MRAkweDNhCgovKiAgTFBTIGRlZmluZSAqLwojZGVmaW5lIERNX0RJR19GQV9USDBfTFBTCQk0IC8qICA0IGluIGxwcyAqLwojZGVmaW5lIERNX0RJR19GQV9USDFfTFBTCQkxNSAvKiAgMTUgbHBzICovCiNkZWZpbmUgRE1fRElHX0ZBX1RIMl9MUFMJCTMwIC8qICAzMCBscHMgKi8KI2RlZmluZSBSU1NJX09GRlNFVF9ESUcJCQkweDA1OwoKc3RydWN0IHJ0d19kaWcgewoJdTgJCURpZ19FbmFibGVfRmxhZzsKCXU4CQlEaWdfRXh0X1BvcnRfU3RhZ2U7CgoJaW50CQlSc3NpTG93VGhyZXNoOwoJaW50CQlSc3NpSGlnaFRocmVzaDsKCgl1MzIJCUZBTG93VGhyZXNoOwoJdTMyCQlGQUhpZ2hUaHJlc2g7CgoJdTgJCUN1clNUQUNvbm5lY3RTdGF0ZTsKCXU4CQlQcmVTVEFDb25uZWN0U3RhdGU7Cgl1OAkJQ3VyTXVsdGlTVEFDb25uZWN0U3RhdGU7CgoJdTgJCVByZUlHVmFsdWU7Cgl1OAkJQ3VySUdWYWx1ZTsKCXU4CQlCYWNrdXBJR1ZhbHVlOwoKCXM4CQlCYWNrb2ZmVmFsOwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWF4OwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWluOwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWF4OwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWluOwoJdTgJCVJzc2lfdmFsX21pbjsKCgl1OAkJUHJlQ0NLX0NDQVRocmVzOwoJdTgJCUN1ckNDS19DQ0FUaHJlczsKCXU4CQlQcmVDQ0tQRFN0YXRlOwoJdTgJCUN1ckNDS1BEU3RhdGU7CgoJdTgJCUxhcmdlRkFIaXQ7Cgl1OAkJRm9yYmlkZGVuSUdJOwoJdTMyCQlSZWNvdmVyX2NudDsKCgl1OAkJRElHX0R5bmFtaWNfTUlOXzA7Cgl1OAkJRElHX0R5bmFtaWNfTUlOXzE7Cglib29sCQliTWVkaWFDb25uZWN0XzA7Cglib29sCQliTWVkaWFDb25uZWN0XzE7CgoJdTMyCQlBbnREaXZfUlNTSV9tYXg7Cgl1MzIJCVJTU0lfbWF4Owp9OwoKc3RydWN0IHJ0bF9wcyB7Cgl1OAkJUHJlQ0NBU3RhdGU7Cgl1OAkJQ3VyQ0NBU3RhdGU7CgoJdTgJCVByZVJGU3RhdGU7Cgl1OAkJQ3VyUkZTdGF0ZTsKCglpbnQJCSAgICBSc3NpX3ZhbF9taW47CgoJdTgJCWluaXRpYWxpemU7Cgl1MzIJCVJlZzg3NCwgUmVnQzcwLCBSZWc4NUMsIFJlZ0E3NDsKCn07CgpzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMgewoJdTMyCUNudF9QYXJpdHlfRmFpbDsKCXUzMglDbnRfUmF0ZV9JbGxlZ2FsOwoJdTMyCUNudF9DcmM4X2ZhaWw7Cgl1MzIJQ250X01jc19mYWlsOwoJdTMyCUNudF9PZmRtX2ZhaWw7Cgl1MzIJQ250X0Nja19mYWlsOwoJdTMyCUNudF9hbGw7Cgl1MzIJQ250X0Zhc3RfRnN5bmM7Cgl1MzIJQ250X1NCX1NlYXJjaF9mYWlsOwoJdTMyCUNudF9PRkRNX0NDQTsKCXUzMglDbnRfQ0NLX0NDQTsKCXUzMglDbnRfQ0NBX2FsbDsKCXUzMglDbnRfQldfVVNDOwkvKiBHYXJ5ICovCgl1MzIJQ250X0JXX0xTQzsJLyogR2FyeSAqLwp9OwoKc3RydWN0IHJ4X2hwYyB7Cgl1OAkJUlhIUF9mbGFnOwoJdTgJCVBTRF9mdW5jX3RyaWdnZXI7Cgl1OAkJUFNEX2JpdG1hcF9SWEhQWzgwXTsKCXU4CQlQcmVfSUdJOwoJdTgJCUN1cl9JR0k7Cgl1OAkJUHJlX3B3X3RoOwoJdTgJCUN1cl9wd190aDsKCWJvb2wJCUZpcnN0X3RpbWVfZW50ZXI7Cglib29sCQlSWEhQX2VuYWJsZTsKCXU4CQlUUF9Nb2RlOwoJc3RydWN0IHRpbWVyX2xpc3QgUFNEVGltZXI7Cn07CgojZGVmaW5lIEFTU09DSUFURV9FTlRSWV9OVU0JMzIgLyogIE1heCBzaXplIG9mIEFzb2NFbnRyeVtdLiAqLwojZGVmaW5lCU9ETV9BU1NPQ0lBVEVfRU5UUllfTlVNCUFTU09DSUFURV9FTlRSWV9OVU0KCi8qICBUaGlzIGluZGljYXRlcyB0d28gZGlmZmVyZW50IHN0ZXBzLiAqLwovKiAgSW4gU1dBV19TVEVQX1BFQUssIGRyaXZlciBuZWVkcyB0byBzd2l0Y2ggYW50ZW5uYSBhbmQgbGlzdGVuIHRvCiAqICB0aGUgc2lnbmFsIG9uIHRoZSBhaXIuICovCi8qICBJbiBTV0FXX1NURVBfREVURVJNSU5FLCBkcml2ZXIganVzdCBjb21wYXJlcyB0aGUgc2lnbmFsIGNhcHR1cmVkIGluCiAqICBTV0FXX1NURVBfUEVBSyB3aXRoIG9yaWdpbmFsIFJTU0kgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIG5lY2Vzc2FyeSB0bwogKiAgc3dpdGNoIGFudGVubmEuICovCgojZGVmaW5lIFNXQVdfU1RFUF9QRUFLCQkwCiNkZWZpbmUgU1dBV19TVEVQX0RFVEVSTUlORQkxCgojZGVmaW5lCVRQX01PREUJCQkwCiNkZWZpbmUJUlNTSV9NT0RFCQkxCiNkZWZpbmUJVFJBRkZJQ19MT1cJCTAKI2RlZmluZQlUUkFGRklDX0hJR0gJCTEKCnN0cnVjdCBzd19hbnRfc3dpdGNoIHsKCXU4CXRyeV9mbGFnOwoJczMyCVByZVJTU0k7Cgl1OAlDdXJBbnRlbm5hOwoJdTgJUHJlQW50ZW5uYTsKCXU4CVJTU0lfVHJ5aW5nOwoJdTgJVGVzdE1vZGU7Cgl1OAliVHJpZ2dlckFudGVubmFTd2l0Y2g7Cgl1OAlTZWxlY3RBbnRlbm5hTWFwOwoJdTgJUlNTSV90YXJnZXQ7CgoJLyogIEJlZm9yZSBsaW5rIEFudGVubmEgU3dpdGNoIGNoZWNrICovCgl1OAlTV0FTX05vTGlua19TdGF0ZTsKCXUzMglTV0FTX05vTGlua19CS19SZWc4NjA7Cglib29sCUFOVEFfT047CS8qIFRvIGluZGljYXRlIEFudCBBIGlzIG9yIG5vdCAqLwoJYm9vbAlBTlRCX09OOwkvKiBUbyBpbmRpY2F0ZSBBbnQgQiBpcyBvbiBvciBub3QgKi8KCglzMzIJUlNTSV9zdW1fQTsKCXMzMglSU1NJX3N1bV9COwoJczMyCVJTU0lfY250X0E7CglzMzIJUlNTSV9jbnRfQjsKCXU2NAlsYXN0VHhPa0NudDsKCXU2NAlsYXN0UnhPa0NudDsKCXU2NAlUWEJ5dGVDbnRfQTsKCXU2NAlUWEJ5dGVDbnRfQjsKCXU2NAlSWEJ5dGVDbnRfQTsKCXU2NAlSWEJ5dGVDbnRfQjsKCXU4CVRyYWZmaWNMb2FkOwoJc3RydWN0IHRpbWVyX2xpc3QgU3dBbnRlbm5hU3dpdGNoVGltZXI7CgkvKiBIeWJyaWQgQW50ZW5uYSBEaXZlcnNpdHkgKi8KCXUzMglDQ0tfQW50MV9DbnRbQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJQ0NLX0FudDJfQ250W0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCU9GRE1fQW50MV9DbnRbQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJT0ZETV9BbnQyX0NudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglSU1NJX0FudDFfU3VtW0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCVJTU0lfQW50Ml9TdW1bQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlUeEFudFtBU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CVRhcmdldFNUQTsKCXU4CWFudHNlbDsKCXU4CVJ4SWRsZUFudDsKfTsKCnN0cnVjdCBlZGNhX3R1cmJvIHsKCWJvb2wgYkN1cnJlbnRUdXJib0VEQ0E7Cglib29sIGJJc0N1clJETFN0YXRlOwoJdTMyCXBydl90cmFmZmljX2lkeDsgLyogIGVkY2EgdHVyYm8gKi8KfTsKCnN0cnVjdCBvZG1fcmF0ZV9hZGFwdCB7Cgl1OAlUeXBlOwkJLyogIERNX1R5cGVfQnlGVy9ETV9UeXBlX0J5RHJpdmVyICovCgl1OAlIaWdoUlNTSVRocmVzaDsJLyogIGlmIFJTU0kgPiBIaWdoUlNTSVRocmVzaAk9PiBSQVRSU3RhdGUgaXMgRE1fUkFUUl9TVEFfSElHSCAqLwoJdTgJTG93UlNTSVRocmVzaDsJLyogIGlmIFJTU0kgPD0gTG93UlNTSVRocmVzaAk9PiBSQVRSU3RhdGUgaXMgRE1fUkFUUl9TVEFfTE9XICovCgl1OAlSQVRSU3RhdGU7CS8qICBDdXJyZW50IFJTU0kgbGV2ZWwsIERNX1JBVFJfU1RBX0hJR0gvRE1fUkFUUl9TVEFfTUlERExFL0RNX1JBVFJfU1RBX0xPVyAqLwoJdTMyCUxhc3RSQVRSOwkvKiAgUkFUUiBSZWdpc3RlciBDb250ZW50ICovCn07CgojZGVmaW5lIElRS19NQUNfUkVHX05VTQkJNAojZGVmaW5lIElRS19BRERBX1JFR19OVU0JMTYKI2RlZmluZSBJUUtfQkJfUkVHX05VTV9NQVgJMTAKI2RlZmluZSBJUUtfQkJfUkVHX05VTQkJOQojZGVmaW5lIEhQX1RIRVJNQUxfTlVNCQk4CgojZGVmaW5lIEFWR19USEVSTUFMX05VTQkJOAojZGVmaW5lIElRS19NYXRyaXhfUkVHX05VTQk4CiNkZWZpbmUgSVFLX01hdHJpeF9TZXR0aW5nc19OVU0JMSsyNCsyMQoKI2RlZmluZQlETV9UeXBlX0J5RldpCQkwCiNkZWZpbmUJRE1fVHlwZV9CeURyaXZlcgkxCgovKiAgRGVjbGFyZSBmb3IgY29tbW9uIGluZm8gKi8KCnN0cnVjdCBvZG1fcGh5X3N0YXR1c19pbmZvIHsKCXU4CVJ4UFdEQkFsbDsKCXU4CVNpZ25hbFF1YWxpdHk7CSAvKiAgaW4gMC0xMDAgaW5kZXguICovCgl1OAlSeE1JTU9TaWduYWxRdWFsaXR5W01BWF9QQVRIX05VTV85MkNTXTsgLyogRVZNICovCgl1OAlSeE1JTU9TaWduYWxTdHJlbmd0aFtNQVhfUEFUSF9OVU1fOTJDU107LyogIGluIDB+MTAwIGluZGV4ICovCglzOAlSeFBvd2VyOyAvKiAgaW4gZEJtIFRyYW5zbGF0ZSBmcm9tIFBXZEIgKi8KCXM4CVJlY3ZTaWduYWxQb3dlcjsvKiAgUmVhbCBwb3dlciBpbiBkQm0gZm9yIHRoaXMgcGFja2V0LCBubwoJCQkJICogYmVhdXRpZmljYXRpb24gYW5kIGFnZ3JlZ2F0aW9uLiBLZWVwIHRoaXMgcmF3CgkJCQkgKiBpbmZvIHRvIGJlIHVzZWQgZm9yIHRoZSBvdGhlciBwcm9jZWR1cmVzLiAqLwoJdTgJQlRSeFJTU0lQZXJjZW50YWdlOwoJdTgJU2lnbmFsU3RyZW5ndGg7IC8qICBpbiAwLTEwMCBpbmRleC4gKi8KCXU4CVJ4UHdyW01BWF9QQVRIX05VTV85MkNTXTsvKiBwZXItcGF0aCdzIHB3ZGIgKi8KCXU4CVJ4U05SW01BWF9QQVRIX05VTV85MkNTXTsvKiBwZXItcGF0aCdzIFNOUiAqLwp9OwoKc3RydWN0IG9kbV9waHlfZGJnX2luZm8gewoJLyogT0RNIFdyaXRlLGRlYnVnIGluZm8gKi8KCXM4CVJ4U05SZEJbTUFYX1BBVEhfTlVNXzkyQ1NdOwoJdTY0CU51bVFyeVBoeVN0YXR1czsKCXU2NAlOdW1RcnlQaHlTdGF0dXNDQ0s7Cgl1NjQJTnVtUXJ5UGh5U3RhdHVzT0ZETTsKCS8qIE90aGVycyAqLwoJczMyCVJ4RVZNW01BWF9QQVRIX05VTV85MkNTXTsKfTsKCnN0cnVjdCBvZG1fcGVyX3BrdF9pbmZvIHsKCXM4CVJhdGU7Cgl1OAlTdGF0aW9uSUQ7Cglib29sCWJQYWNrZXRNYXRjaEJTU0lEOwoJYm9vbAliUGFja2V0VG9TZWxmOwoJYm9vbAliUGFja2V0QmVhY29uOwp9OwoKc3RydWN0IG9kbV9tYWNfc3RhdHVzX2luZm8gewoJdTgJdGVzdDsKfTsKCmVudW0gb2RtX2FiaWxpdHkgewoJLyogIEJCIFRlYW0gKi8KCU9ETV9ESUcJCQk9IDB4MDAwMDAwMDEsCglPRE1fSElHSF9QT1dFUgkJPSAweDAwMDAwMDAyLAoJT0RNX0NDS19DQ0FfVEgJCT0gMHgwMDAwMDAwNCwKCU9ETV9GQV9TVEFUSVNUSUNTCT0gMHgwMDAwMDAwOCwKCU9ETV9SQU1BU0sJCT0gMHgwMDAwMDAxMCwKCU9ETV9SU1NJX01PTklUT1IJPSAweDAwMDAwMDIwLAoJT0RNX1NXX0FOVERJVgkJPSAweDAwMDAwMDQwLAoJT0RNX0hXX0FOVERJVgkJPSAweDAwMDAwMDgwLAoJT0RNX0JCX1BXUlNWCQk9IDB4MDAwMDAxMDAsCglPRE1fMlRQQVRIRElWCQk9IDB4MDAwMDAyMDAsCglPRE1fMVRQQVRIRElWCQk9IDB4MDAwMDA0MDAsCglPRE1fUFNEMkFGSAkJPSAweDAwMDAwODAwCn07CgovKiAgMjAxMS8xMC8yMCBNSCBEZWZpbmUgQ29tbW9uIGluZm8gZW51bSBmb3IgYWxsIHRlYW0uICovCgplbnVtIG9kbV9jb21tb25faW5mb19kZWYgewoJLyogIEZpeGVkIHZhbHVlOiAqLwoKCS8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gKi8KCU9ETV9DTU5JTkZPX1BMQVRGT1JNID0gMCwKCU9ETV9DTU5JTkZPX0FCSUxJVFksCQkvKiBPRE1fQUJJTElUWV9FICovCglPRE1fQ01OSU5GT19JTlRFUkZBQ0UsCQkvKiBPRE1fSU5URVJGQUNFX0UgKi8KCU9ETV9DTU5JTkZPX01QX1RFU1RfQ0hJUCwKCU9ETV9DTU5JTkZPX0lDX1RZUEUsCQkvKiBPRE1fSUNfVFlQRV9FICovCglPRE1fQ01OSU5GT19DVVRfVkVSLAkJLyogT0RNX0NVVF9WRVJTSU9OX0UgKi8KCU9ETV9DTU5JTkZPX1JGX1RZUEUsCQkvKiBPRE1fUkZfUEFUSF9FIG9yIE9ETV9SRl9UWVBFX0U/ICovCglPRE1fQ01OSU5GT19CT0FSRF9UWVBFLAkJLyogT0RNX0JPQVJEX1RZUEVfRSAqLwoJT0RNX0NNTklORk9fRVhUX0xOQSwJCS8qIHRydWUgKi8KCU9ETV9DTU5JTkZPX0VYVF9QQSwKCU9ETV9DTU5JTkZPX0VYVF9UUlNXLAoJT0RNX0NNTklORk9fUEFUQ0hfSUQsCQkvKiBDVVNUT01FUiBJRCAqLwoJT0RNX0NNTklORk9fQklOSENUX1RFU1QsCglPRE1fQ01OSU5GT19CV0lGSV9URVNULAoJT0RNX0NNTklORk9fU01BUlRfQ09OQ1VSUkVOVCwKCS8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gICovCgoJLyogIER5bmFtaWMgdmFsdWU6ICovCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICAqLwoJT0RNX0NNTklORk9fTUFDX1BIWV9NT0RFLAkvKiAgT0RNX01BQ19QSFlfTU9ERV9FICovCglPRE1fQ01OSU5GT19UWF9VTkksCglPRE1fQ01OSU5GT19SWF9VTkksCglPRE1fQ01OSU5GT19XTV9NT0RFLAkJLyogIE9ETV9XSVJFTEVTU19NT0RFX0UgKi8KCU9ETV9DTU5JTkZPX0JBTkQsCQkvKiAgT0RNX0JBTkRfVFlQRV9FICovCglPRE1fQ01OSU5GT19TRUNfQ0hOTF9PRkZTRVQsCS8qICBPRE1fU0VDX0NITkxfT0ZGU0VUX0UgKi8KCU9ETV9DTU5JTkZPX1NFQ19NT0RFLAkJLyogIE9ETV9TRUNVUklUWV9FICovCglPRE1fQ01OSU5GT19CVywJCQkvKiAgT0RNX0JXX0UgKi8KCU9ETV9DTU5JTkZPX0NITkwsCgoJT0RNX0NNTklORk9fRE1TUF9HRVRfVkFMVUUsCglPRE1fQ01OSU5GT19CVUREWV9BREFQVE9SLAoJT0RNX0NNTklORk9fRE1TUF9JU19NQVNURVIsCglPRE1fQ01OSU5GT19TQ0FOLAoJT0RNX0NNTklORk9fUE9XRVJfU0FWSU5HLAoJT0RNX0NNTklORk9fT05FX1BBVEhfQ0NBLAkvKiAgT0RNX0NDQV9QQVRIX0UgKi8KCU9ETV9DTU5JTkZPX0RSVl9TVE9QLAoJT0RNX0NNTklORk9fUE5QX0lOLAoJT0RNX0NNTklORk9fSU5JVF9PTiwKCU9ETV9DTU5JTkZPX0FOVF9URVNULAoJT0RNX0NNTklORk9fTkVUX0NMT1NFRCwKCU9ETV9DTU5JTkZPX01QX01PREUsCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgovKiBDQUxMIEJZIFZBTFVFLS0tLS0tLS0tLS0tLSAqLwoJT0RNX0NNTklORk9fV0lGSV9ESVJFQ1QsCglPRE1fQ01OSU5GT19XSUZJX0RJU1BMQVksCglPRE1fQ01OSU5GT19MSU5LLAoJT0RNX0NNTklORk9fUlNTSV9NSU4sCglPRE1fQ01OSU5GT19EQkdfQ09NUCwJCQkvKiAgdTY0ICovCglPRE1fQ01OSU5GT19EQkdfTEVWRUwsCQkJLyogIHUzMiAqLwoJT0RNX0NNTklORk9fUkFfVEhSRVNIT0xEX0hJR0gsCQkvKiAgdTggKi8KCU9ETV9DTU5JTkZPX1JBX1RIUkVTSE9MRF9MT1csCQkvKiAgdTggKi8KCU9ETV9DTU5JTkZPX1JGX0FOVEVOTkFfVFlQRSwJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fQlRfRElTQUJMRUQsCglPRE1fQ01OSU5GT19CVF9PUEVSQVRJT04sCglPRE1fQ01OSU5GT19CVF9ESUcsCglPRE1fQ01OSU5GT19CVF9CVVNZLAkJCS8qIENoZWNrIEJ0IGlzIHVzaW5nIG9yIG5vdCAqLwoJT0RNX0NNTklORk9fQlRfRElTQUJMRV9FRENBLAovKiBDQUxMIEJZIFZBTFVFLS0tLS0tLS0tLS0tLSovCgoJLyogIER5bmFtaWMgcHRyIGFycmF5IGhvb2sgaXRtcy4gKi8KCU9ETV9DTU5JTkZPX1NUQV9TVEFUVVMsCglPRE1fQ01OSU5GT19QSFlfU1RBVFVTLAoJT0RNX0NNTklORk9fTUFDX1NUQVRVUywKCU9ETV9DTU5JTkZPX01BWCwKfTsKCi8qICAyMDExLzEwLzIwIE1IIERlZmluZSBPRE0gc3VwcG9ydCBhYmlsaXR5LiAgT0RNX0NNTklORk9fQUJJTElUWSAqLwoKZW51bSBvZG1fYWJpbGl0eV9kZWYgewoJLyogIEJCIE9ETSBzZWN0aW9uIEJJVCAwLTE1ICovCglPRE1fQkJfRElHCQkJPSBCSVQoMCksCglPRE1fQkJfUkFfTUFTSwkJCT0gQklUKDEpLAoJT0RNX0JCX0RZTkFNSUNfVFhQV1IJCT0gQklUKDIpLAoJT0RNX0JCX0ZBX0NOVAkJCT0gQklUKDMpLAoJT0RNX0JCX1JTU0lfTU9OSVRPUgkJPSBCSVQoNCksCglPRE1fQkJfQ0NLX1BECQkJPSBCSVQoNSksCglPRE1fQkJfQU5UX0RJVgkJCT0gQklUKDYpLAoJT0RNX0JCX1BXUl9TQVZFCQkJPSBCSVQoNyksCglPRE1fQkJfUFdSX1RSQQkJCT0gQklUKDgpLAoJT0RNX0JCX1JBVEVfQURBUFRJVkUJCT0gQklUKDkpLAoJT0RNX0JCX1BBVEhfRElWCQkJPSBCSVQoMTApLAoJT0RNX0JCX1BTRAkJCT0gQklUKDExKSwKCU9ETV9CQl9SWEhQCQkJPSBCSVQoMTIpLAoKCS8qICBNQUMgRE0gc2VjdGlvbiBCSVQgMTYtMjMgKi8KCU9ETV9NQUNfRURDQV9UVVJCTwkJPSBCSVQoMTYpLAoJT0RNX01BQ19FQVJMWV9NT0RFCQk9IEJJVCgxNyksCgoJLyogIFJGIE9ETSBzZWN0aW9uIEJJVCAyNC0zMSAqLwoJT0RNX1JGX1RYX1BXUl9UUkFDSwkJPSBCSVQoMjQpLAoJT0RNX1JGX1JYX0dBSU5fVFJBQ0sJCT0gQklUKDI1KSwKCU9ETV9SRl9DQUxJQlJBVElPTgkJPSBCSVQoMjYpLAp9OwoKI2RlZmluZSBPRE1fUlRMODE4OEUJCUJJVCg0KQoKLyogT0RNX0NNTklORk9fQ1VUX1ZFUiAqLwplbnVtIG9kbV9jdXRfdmVyc2lvbiB7CglPRE1fQ1VUX0EJPQkxLAoJT0RNX0NVVF9CCT0JMiwKCU9ETV9DVVRfQwk9CTMsCglPRE1fQ1VUX0QJPQk0LAoJT0RNX0NVVF9FCT0JNSwKCU9ETV9DVVRfRgk9CTYsCglPRE1fQ1VUX1RFU1QJPQk3LAp9OwoKLyogIE9ETV9DTU5JTkZPX1JGX1RZUEUgKi8KLyogIEZvciBleGFtcGxlIDFUMlIgKEErQUIgPSBCSVQwfEJJVDR8QklUNSkgKi8KZW51bSBvZG1fcmZfcGF0aCB7CglPRE1fUkZfVFhfQQk9CUJJVCgwKSwKCU9ETV9SRl9UWF9CCT0JQklUKDEpLAoJT0RNX1JGX1RYX0MJPQlCSVQoMiksCglPRE1fUkZfVFhfRAk9CUJJVCgzKSwKCU9ETV9SRl9SWF9BCT0JQklUKDQpLAoJT0RNX1JGX1JYX0IJPQlCSVQoNSksCglPRE1fUkZfUlhfQwk9CUJJVCg2KSwKCU9ETV9SRl9SWF9ECT0JQklUKDcpLAp9OwoKZW51bSBvZG1fcmZfdHlwZSB7CglPRE1fMVQxUgk9CTAsCglPRE1fMVQyUgk9CTEsCglPRE1fMlQyUgk9CTIsCglPRE1fMlQzUgk9CTMsCglPRE1fMlQ0Ugk9CTQsCglPRE1fM1QzUgk9CTUsCglPRE1fM1Q0Ugk9CTYsCglPRE1fNFQ0Ugk9CTcsCn07CgovKiAgT0RNIER5bmFtaWMgY29tbW9uIGluZm8gdmFsdWUgZGVmaW5pdGlvbiAqLwoKZW51bSBvZG1fbWFjX3BoeV9tb2RlIHsKCU9ETV9TTVNQCT0gMCwKCU9ETV9ETVNQCT0gMSwKCU9ETV9ETURQCT0gMiwKfTsKCmVudW0gb2RtX2J0X2NvZXhpc3QgewoJT0RNX0JUX0JVU1kJCT0gMSwKCU9ETV9CVF9PTgkJPSAyLAoJT0RNX0JUX09GRgkJPSAzLAoJT0RNX0JUX05PTkUJCT0gNCwKfTsKCi8qICBPRE1fQ01OSU5GT19PUF9NT0RFICovCmVudW0gb2RtX29wZXJhdGlvbl9tb2RlIHsKCU9ETV9OT19MSU5LCQk9IEJJVCgwKSwKCU9ETV9MSU5LCQk9IEJJVCgxKSwKCU9ETV9TQ0FOCQk9IEJJVCgyKSwKCU9ETV9QT1dFUlNBVkUJCT0gQklUKDMpLAoJT0RNX0FQX01PREUJCT0gQklUKDQpLAoJT0RNX0NMSUVOVF9NT0RFCQk9IEJJVCg1KSwKCU9ETV9BRF9IT0MJCT0gQklUKDYpLAoJT0RNX1dJRklfRElSRUNUCQk9IEJJVCg3KSwKCU9ETV9XSUZJX0RJU1BMQVkJPSBCSVQoOCksCn07CgovKiAgT0RNX0NNTklORk9fV01fTU9ERSAqLwplbnVtIG9kbV93aXJlbGVzc19tb2RlIHsKCU9ETV9XTV9VTktOT1cJPSAweDAsCglPRE1fV01fQgk9IEJJVCgwKSwKCU9ETV9XTV9HCT0gQklUKDEpLAoJT0RNX1dNX0EJPSBCSVQoMiksCglPRE1fV01fTjI0Rwk9IEJJVCgzKSwKCU9ETV9XTV9ONUcJPSBCSVQoNCksCglPRE1fV01fQVVUTwk9IEJJVCg1KSwKCU9ETV9XTV9BQwk9IEJJVCg2KSwKfTsKCi8qICBPRE1fQ01OSU5GT19CQU5EICovCmVudW0gb2RtX2JhbmRfdHlwZSB7CglPRE1fQkFORF8yXzRHCT0gQklUKDApLAoJT0RNX0JBTkRfNUcJPSBCSVQoMSksCn07CgovKiAgT0RNX0NNTklORk9fU0VDX0NITkxfT0ZGU0VUICovCmVudW0gb2RtX3NlY19jaG5sX29mZnNldCB7CglPRE1fRE9OVF9DQVJFCT0gMCwKCU9ETV9CRUxPVwk9IDEsCglPRE1fQUJPVkUJPSAyCn07CgovKiAgT0RNX0NNTklORk9fU0VDX01PREUgKi8KZW51bSBvZG1fc2VjdXJpdHkgewoJT0RNX1NFQ19PUEVOCQk9IDAsCglPRE1fU0VDX1dFUDQwCQk9IDEsCglPRE1fU0VDX1RLSVAJCT0gMiwKCU9ETV9TRUNfUkVTRVJWRQkJPSAzLAoJT0RNX1NFQ19BRVNDQ01QCQk9IDQsCglPRE1fU0VDX1dFUDEwNAkJPSA1LAoJT0RNX1dFUF9XUEFfTUlYRUQgICAJPSA2LCAvKiAgV0VQICsgV1BBICovCglPRE1fU0VDX1NNUzQJCT0gNywKfTsKCi8qICBPRE1fQ01OSU5GT19CVyAqLwplbnVtIG9kbV9idyB7CglPRE1fQlcyME0JCT0gMCwKCU9ETV9CVzQwTQkJPSAxLAoJT0RNX0JXODBNCQk9IDIsCglPRE1fQlcxNjBNCQk9IDMsCglPRE1fQlcxME0JCT0gNCwKfTsKCi8qICBPRE1fQ01OSU5GT19CT0FSRF9UWVBFICovCmVudW0gb2RtX2JvYXJkX3R5cGUgewoJT0RNX0JPQVJEX05PUk1BTAk9IDAsCglPRE1fQk9BUkRfSElHSFBXUgk9IDEsCglPRE1fQk9BUkRfTUlOSUNBUkQJPSAyLAoJT0RNX0JPQVJEX1NMSU0JCT0gMywKCU9ETV9CT0FSRF9DT01CTwkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX09ORV9QQVRIX0NDQSAqLwplbnVtIG9kbV9jY2FfcGF0aCB7CglPRE1fQ0NBXzJSCQk9IDAsCglPRE1fQ0NBXzFSX0EJCT0gMSwKCU9ETV9DQ0FfMVJfQgkJPSAyLAp9OwoKc3RydWN0IG9kbV9yYV9pbmZvIHsKCXU4IFJhdGVJRDsKCXUzMiBSYXRlTWFzazsKCXUzMiBSQVVzZVJhdGU7Cgl1OCBSYXRlU0dJOwoJdTggUnNzaVN0YVJBOwoJdTggUHJlUnNzaVN0YVJBOwoJdTggU0dJRW5hYmxlOwoJdTggRGVjaXNpb25SYXRlOwoJdTggUHJlUmF0ZTsKCXU4IEhpZ2hlc3RSYXRlOwoJdTggTG93ZXN0UmF0ZTsKCXUzMiBOc2NVcDsKCXUzMiBOc2NEb3duOwoJdTE2IFJUWVs1XTsKCXUzMiBUT1RBTDsKCXUxNiBEUk9QOwoJdTggQWN0aXZlOwoJdTE2IFJwdFRpbWU7Cgl1OCBSQVdhaXRpbmdDb3VudGVyOwoJdTggUkFQZW5kaW5nQ291bnRlcjsKCXU4IFBUQWN0aXZlOwkvKiAgb24gb3Igb2ZmICovCgl1OCBQVFRyeVN0YXRlOwkvKiAgMCB0cnlpbmcgc3RhdGUsIDEgZm9yIGRlY2lzaW9uIHN0YXRlICovCgl1OCBQVFN0YWdlOwkvKiAgMH42ICovCgl1OCBQVFN0b3BDb3VudDsJLyogU3RvcCBQVCBjb3VudGVyICovCgl1OCBQVFByZVJhdGU7CS8qICBpZiByYXRlIGNoYW5nZSBkbyBQVCAqLwoJdTggUFRQcmVSc3NpOwkvKiAgaWYgUlNTSSBjaGFuZ2UgNSUgZG8gUFQgKi8KCXU4IFBUTW9kZVNTOwkvKiAgZGVjaWRlIHdoaXRjaCByYXRlIHNob3VsZCBkbyBQVCAqLwoJdTggUkFzdGFnZTsJLyogIFN0YWdlUkEsIGRlY2lkZSBob3cgbWFueSB0aW1lcyBSQSB3aWxsIGJlIGRvbmUKCQkJICogYmV0d2VlbiBQVCAqLwoJdTggUFRTbW9vdGhGYWN0b3I7Cn07CgpzdHJ1Y3QgaWprX21hdHJpeF9yZWdzX3NldCB7Cglib29sCWJJUUtEb25lOwoJczMyCVZhbHVlWzFdW0lRS19NYXRyaXhfUkVHX05VTV07Cn07CgpzdHJ1Y3Qgb2RtX3JmX2NhbCB7CgkvKiBmb3IgdHggcG93ZXIgdHJhY2tpbmcgKi8KCXUzMglSZWdBMjQ7IC8qICBmb3IgVGVtcENDSyAqLwoJczMyCVJlZ0U5NDsKCXMzMglSZWdFOUM7CglzMzIJUmVnRUI0OwoJczMyCVJlZ0VCQzsKCgl1OAlUWFBvd2VyY291bnQ7Cglib29sCWJUWFBvd2VyVHJhY2tpbmc7Cgl1OAlUeFBvd2VyVHJhY2tDb250cm9sOyAvKiBmb3IgbXAgbW9kZSwgdHVybiBvZmYgdHhwd3J0cmFja2luZwoJCQkJICAgICAgKiBhcyBkZWZhdWx0ICovCgl1OAlUTV9UcmlnZ2VyOwoJdTgJSW50ZXJuYWxQQTVHWzJdOwkvKiBwYXRoQSAvIHBhdGhCICovCgoJdTgJVGhlcm1hbE1ldGVyWzJdOyAgICAvKiBUaGVybWFsTWV0ZXIsIGluZGV4IDAgZm9yIFJGSUMwLAoJCQkJICAgICAqIGFuZCAxIGZvciBSRklDMSAqLwoJdTgJVGhlcm1hbFZhbHVlOwoJdTgJVGhlcm1hbFZhbHVlX0xDSzsKCXU4CVRoZXJtYWxWYWx1ZV9JUUs7Cgl1OAlUaGVybWFsVmFsdWVfRFBLOwoJdTgJVGhlcm1hbFZhbHVlX0FWR1tBVkdfVEhFUk1BTF9OVU1dOwoJdTgJVGhlcm1hbFZhbHVlX0FWR19pbmRleDsKCXU4CVRoZXJtYWxWYWx1ZV9SeEdhaW47Cgl1OAlUaGVybWFsVmFsdWVfQ3J5c3RhbDsKCXU4CVRoZXJtYWxWYWx1ZV9EUEtzdG9yZTsKCXU4CVRoZXJtYWxWYWx1ZV9EUEt0cmFjazsKCWJvb2wJVHhQb3dlclRyYWNraW5nSW5Qcm9ncmVzczsKCWJvb2wJYkRQS2VuYWJsZTsKCglib29sCWJSZWxvYWR0eHBvd2VyaW5kZXg7Cgl1OAliUmZQaUVuYWJsZTsKCXUzMglUWFBvd2VyVHJhY2tpbmdDYWxsYmFja0NudDsgLyogY29zYSBhZGQgZm9yIGRlYnVnICovCgoJdTgJYkNDS2luQ0gxNDsKCXU4CUNDS19pbmRleDsKCXU4CU9GRE1faW5kZXhbMl07Cglib29sIGJEb25lVHhwb3dlcjsKCgl1OAlUaGVybWFsVmFsdWVfSFBbSFBfVEhFUk1BTF9OVU1dOwoJdTgJVGhlcm1hbFZhbHVlX0hQX2luZGV4OwoJc3RydWN0IGlqa19tYXRyaXhfcmVnc19zZXQgSVFLTWF0cml4UmVnU2V0dGluZ1tJUUtfTWF0cml4X1NldHRpbmdzX05VTV07CgoJdTgJRGVsdGFfSVFLOwoJdTgJRGVsdGFfTENLOwoKCS8qIGZvciBJUUsgKi8KCXUzMglSZWdDMDQ7Cgl1MzIJUmVnODc0OwoJdTMyCVJlZ0MwODsKCXUzMglSZWdCNjg7Cgl1MzIJUmVnQjZDOwoJdTMyCVJlZzg3MDsKCXUzMglSZWc4NjA7Cgl1MzIJUmVnODY0OwoKCWJvb2wJYklRS0luaXRpYWxpemVkOwoJYm9vbAliTENLSW5Qcm9ncmVzczsKCWJvb2wJYkFudGVubmFEZXRlY3RlZDsKCXUzMglBRERBX2JhY2t1cFtJUUtfQUREQV9SRUdfTlVNXTsKCXUzMglJUUtfTUFDX2JhY2t1cFtJUUtfTUFDX1JFR19OVU1dOwoJdTMyCUlRS19CQl9iYWNrdXBfcmVjb3Zlcls5XTsKCXUzMglJUUtfQkJfYmFja3VwW0lRS19CQl9SRUdfTlVNXTsKCgkvKiBmb3IgQVBLICovCgl1MzIJQVBLb3V0cHV0WzJdWzJdOyAvKiBwYXRoIEEvQjsgb3V0cHV0MV8xYS9vdXRwdXQxXzJhICovCgl1OAliQVBLZG9uZTsKCXU4CWJBUEtUaGVybWFsTWV0ZXJJZ25vcmU7Cgl1OAliRFBkb25lOwoJdTgJYkRQUGF0aEFPSzsKCXU4CWJEUFBhdGhCT0s7Cn07CgovKiAgT0RNIER5bmFtaWMgY29tbW9uIGluZm8gdmFsdWUgZGVmaW5pdGlvbiAqLwoKc3RydWN0IGZhc3RfYW50X3RyYWluIHsKCXU4CUJzc2lkWzZdOwoJdTgJYW50c2VsX3J4X2tlZXBfMDsKCXU4CWFudHNlbF9yeF9rZWVwXzE7Cgl1OAlhbnRzZWxfcnhfa2VlcF8yOwoJdTMyCWFudFN1bVJTU0lbN107Cgl1MzIJYW50UlNTSWNudFs3XTsKCXUzMglhbnRBdmVSU1NJWzddOwoJdTgJRkFUX1N0YXRlOwoJdTMyCVRyYWluSWR4OwoJdTgJYW50c2VsX2FbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJYW50c2VsX2JbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTgJYW50c2VsX2NbT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCU1haW5BbnRfU3VtW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglBdXhBbnRfU3VtW09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglNYWluQW50X0NudFtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJQXV4QW50X0NudFtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlSeElkbGVBbnQ7Cglib29sCWJCZWNvbWVMaW5rZWQ7Cn07CgplbnVtIGZhdF9zdGF0ZSB7CglGQVRfTk9STUFMX1NUQVRFCQk9IDAsCglGQVRfVFJBSU5JTkdfU1RBVEUJCT0gMSwKfTsKCmVudW0gYW50X2Rpdl90eXBlIHsKCU5PX0FOVERJVgkJCT0gMHhGRiwKCUNHX1RSWF9IV19BTlRESVYJCT0gMHgwMSwKCUNHQ1NfUlhfSFdfQU5URElWCQk9IDB4MDIsCglGSVhFRF9IV19BTlRESVYJCQk9IDB4MDMsCglDR19UUlhfU01BUlRfQU5URElWCQk9IDB4MDQsCglDR0NTX1JYX1NXX0FOVERJVgkJPSAweDA1LAp9OwoKLyogQ29weSBmcm9tIFNENCBkZWZpbmVkIHN0cnVjdHVyZS4gV2UgdXNlIHRvIHN1cHBvcnQgUEhZIERNIGludGVncmF0aW9uLiAqLwpzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCB7CgkvKiAJQWRkIGZvciBkaWZmZXJlbnQgdGVhbSB1c2UgdGVtcG9yYXJpbHkgKi8KCXN0cnVjdCBhZGFwdGVyICpBZGFwdGVyOwkvKiAgRm9yIENFL05JQyB0ZWFtICovCglzdHJ1Y3QgcnRsODE5MmNkX3ByaXYgKnByaXY7CS8qICBGb3IgQVAvQURTTCB0ZWFtICovCgkvKiAgV0hlbiB5b3UgdXNlIGFib3ZlIHBvaW50ZXJzLCB0aGV5IG11c3QgYmUgaW5pdGlhbGl6ZWQuICovCglib29sCW9kbV9yZWFkeTsKCglzdHJ1Y3QgcnRsODE5MmNkX3ByaXYgKmZha2VfcHJpdjsKCXU2NAlEZWJ1Z0NvbXBvbmVudHM7Cgl1MzIJRGVidWdMZXZlbDsKCi8qICBPRE0gSEFORExFLCBEUklWRVIgTkVFRFMgTk9UIFRPIEhPT0stLS0tLS0gKi8KCWJvb2wJYkNja0hpZ2hQb3dlcjsKCXU4CVJGUGF0aFJ4RW5hYmxlOwkJLyogIE9ETV9DTU5JTkZPX1JGUEFUSF9FTkFCTEUgKi8KCXU4CUNvbnRyb2xDaGFubmVsOwovKiAgT0RNIEhBTkRMRSwgRFJJVkVSIE5FRURTIE5PVCBUTyBIT09LLS0tLS0tICovCgovKiAxICBDT01NT04gSU5GT1JNQVRJT04gKi8KCS8qICBJbml0IFZhbHVlICovCi8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gKi8KCS8qICBPRE0gUGxhdGZvcm0gaW5mbyBBUC9BRFNML0NFL01QID0gMS8yLzMvNCAqLwoJdTgJU3VwcG9ydFBsYXRmb3JtOwoJLyogIE9ETSBTdXBwb3J0IEFiaWxpdHkgRElHL1JBVFIvVFhfUFdSX1RSQUNLLyChS6FLID0gMS8yLzMvoUsgKi8KCXUzMglTdXBwb3J0QWJpbGl0eTsKCS8qICBPRE0gUENJRS9VU0IvU0RJTy9HU1BJID0gMC8xLzIvMyAqLwoJdTgJU3VwcG9ydEludGVyZmFjZTsKCS8qICBPRE0gY29tcG9zaXRlIG9yIGluZGVwZW5kZW50LiBCaXQgb3JpZW50ZWQvIDkyQys5MkQrIC4uLi4gb3IgYW55CgkgKiAgb3RoZXIgdHlwZSA9IDEvMi8zLy4uLiAqLwoJdTMyCVN1cHBvcnRJQ1R5cGU7CgkvKiAgQ3V0IFZlcnNpb24gVGVzdENoaXAvQS1jdXQvQi1jdXQuLi4gPSAwLzEvMi8zLy4uLiAqLwoJdTgJQ3V0VmVyc2lvbjsKCS8qICBCb2FyZCBUeXBlIE5vcm1hbC9IaWdoUG93ZXIvTWluaUNhcmQvU0xJTS9Db21iby8uID0gMC8xLzIvMy80Ly4gKi8KCXU4CUJvYXJkVHlwZTsKCS8qICB3aXRoIGV4dGVybmFsIExOQSAgTk8vWWVzID0gMC8xICovCgl1OAlFeHRMTkE7CgkvKiAgd2l0aCBleHRlcm5hbCBQQSAgTk8vWWVzID0gMC8xICovCgl1OAlFeHRQQTsKCS8qICB3aXRoIGV4dGVybmFsIFRSU1cgIE5PL1llcyA9IDAvMSAqLwoJdTgJRXh0VFJTVzsKCXU4CVBhdGNoSUQ7IC8qIEN1c3RvbWVyIElEICovCglib29sCWJJbkhjdFRlc3Q7Cglib29sCWJXSUZJVGVzdDsKCglib29sCWJEdWFsTWFjU21hcnRDb25jdXJyZW50OwoJdTMyCUJLX1N1cHBvcnRBYmlsaXR5OwoJdTgJQW50RGl2VHlwZTsKLyogSE9PSyBCRUZPUkUgUkVHIElOSVQtLS0tLS0tLS0tLSAqLwoKCS8qICBEeW5hbWljIFZhbHVlICovCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgoJdTgJdThfdGVtcDsKCWJvb2wJYm9vbF90ZW1wOwoJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXJfdGVtcDsKCgkvKiAgTUFDIFBIWSBNb2RlIFNNU1AvRE1TUC9ETURQID0gMC8xLzIgKi8KCXU4CSpwTWFjUGh5TW9kZTsKCS8qIFRYIFVuaWNhc3QgYnl0ZSBjb3VudCAqLwoJdTY0CSpwTnVtVHhCeXRlc1VuaWNhc3Q7CgkvKiBSWCBVbmljYXN0IGJ5dGUgY291bnQgKi8KCXU2NAkqcE51bVJ4Qnl0ZXNVbmljYXN0OwoJLyogIFdpcmVsZXNzIG1vZGUgQi9HL0EvTiA9IEJJVDAvQklUMS9CSVQyL0JJVDMgKi8KCXU4CSpwV2lyZWxlc3NNb2RlOyAvKiBPRE1fV0lSRUxFU1NfTU9ERV9FICovCgkvKiAgRnJlcXVlbmNlIGJhbmQgMi40Ry81RyA9IDAvMSAqLwoJdTgJKnBCYW5kVHlwZTsKCS8qICBTZWNvbmRhcnkgY2hhbm5lbCBvZmZzZXQgZG9uJ3RfY2FyZS9iZWxvdy9hYm92ZSA9IDAvMS8yICovCgl1OAkqcFNlY0NoT2Zmc2V0OwoJLyogIFNlY3VyaXR5IG1vZGUgT3Blbi9XRVAvQUVTL1RLSVAgPSAwLzEvMi8zICovCgl1OAkqcFNlY3VyaXR5OwoJLyogIEJXIGluZm8gMjBNLzQwTS84ME0gPSAwLzEvMiAqLwoJdTgJKnBCYW5kV2lkdGg7CgkvKiAgQ2VudHJhbCBjaGFubmVsIGxvY2F0aW9uIENoMS9DaDIvLi4uLiAqLwoJdTgJKnBDaGFubmVsOwkvKiBjZW50cmFsIGNoYW5uZWwgbnVtYmVyICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIDkyRCBETVNQICovCgoJYm9vbAkqcGJHZXRWYWx1ZUZyb21PdGhlck1hYzsKCXN0cnVjdCBhZGFwdGVyICoqcEJ1ZGR5QWRhcHRlcjsKCWJvb2wJKnBiTWFzdGVyT2ZETVNQOyAvKiBNQUMwOiBtYXN0ZXIsIE1BQzE6IHNsYXZlICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIFN0YXR1cyAqLwoJYm9vbAkqcGJTY2FuSW5Qcm9jZXNzOwoJYm9vbAkqcGJQb3dlclNhdmluZzsKCS8qICBDQ0EgUGF0aCAyLXBhdGgvcGF0aC1BL3BhdGgtQiA9IDAvMS8yOyB1c2luZyBPRE1fQ0NBX1BBVEhfRS4gKi8KCXU4CSpwT25lUGF0aENDQTsKCS8qIHBNZ250SW5mby0+QW50ZW5uYVRlc3QgKi8KCXU4CSpwQW50ZW5uYVRlc3Q7Cglib29sCSpwYk5ldF9jbG9zZWQ7Ci8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgkvKiAgKi8KLyogQ0FMTCBCWSBWQUxVRS0tLS0tLS0tLS0tLS0gKi8KCWJvb2wJYldJRklfRGlyZWN0OwoJYm9vbAliV0lGSV9EaXNwbGF5OwoJYm9vbAliTGlua2VkOwoJdTgJUlNTSV9NaW47Cgl1OAlJbnRlcmZhY2VJbmRleDsgLyogIEFkZCBmb3IgOTJEICBkdWFsIE1BQzogMC0tTWFjMCAxLS1NYWMxICovCglib29sCWJJc01QQ2hpcDsKCWJvb2wJYk9uZUVudHJ5T25seTsKCS8qICBDb21tb24gaW5mbyBmb3IgQlRETSAqLwoJYm9vbAliQnREaXNhYmxlZDsJLyogIEJUIGlzIGRpc2FibGVkICovCglib29sCWJCdEhzT3BlcmF0aW9uOwkvKiAgQlQgSFMgbW9kZSBpcyB1bmRlciBwcm9ncmVzcyAqLwoJdTgJYnRIc0RpZ1ZhbDsJLyogIHVzZSBCVCByc3NpIHRvIGRlY2lkZSB0aGUgRElHIHZhbHVlICovCglib29sCWJCdERpc2FibGVFZGNhVHVyYm87LyogVW5kZXIgc29tZSBjb25kaXRpb24sIGRvbid0IGVuYWJsZSB0aGUKCQkJCSAgICAgKiBFRENBIFR1cmJvICovCglib29sCWJCdEJ1c3k7CQkJLyogIEJUIGlzIGJ1c3kuICovCi8qIENBTEwgQlkgVkFMVUUtLS0tLS0tLS0tLS0tICovCgoJLyogMiBEZWZpbmUgU1RBIGluZm8uICovCgkvKiAgX09ETV9TVEFfSU5GTyAqLwoJLyogIEZvciBNUCwgd2UgbmVlZCB0byByZWR1Y2Ugb25lIGFycmF5IHBvaW50ZXIgZm9yIGRlZmF1bHQgcG9ydC4/PyAqLwoJc3RydWN0IHN0YV9pbmZvICpwT0RNX1N0YUluZm9bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoKCXUxNglDdXJybWluUnB0VGltZTsKCXN0cnVjdCBvZG1fcmFfaW5mbyBSQUluZm9bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOyAvKiBVc2UgTWFjSUQgYXMKCQkJKiBhcnJheSBpbmRleC4gU1RBIE1hY0lEPTAsCgkJCSogVldpRmkgQ2xpZW50IE1hY0lEPXsxLCBPRE1fQVNTT0NJQVRFX0VOVFJZX05VTS0xfSAqLwoJLyogICovCgkvKiAgMjAxMi8wMi8xNCBNSCBBZGQgdG8gc2hhcmUgODhFIHJhIHdpdGggb3RoZXIgU1cgdGVhbS4gKi8KCS8qICBXZSBuZWVkIHRvIGNvbGVsY3QgYWxsIHN1cHBvcnQgYWJpbGl0IHRvIGEgcHJvcGVyIGFyZWEuICovCgkvKiAgKi8KCWJvb2wJUmFTdXBwb3J0ODhFOwoKCS8qICBEZWZpbmUgLi4uLi4uLi4uLi4gKi8KCgkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwoJc3RydWN0IG9kbV9waHlfZGJnX2luZm8gUGh5RGJnSW5mbzsKCgkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwoJc3RydWN0IG9kbV9tYWNfc3RhdHVzX2luZm8gKnBNYWNJbmZvOwoKCS8qICBEaWZmZXJlbnQgVGVhbSBpbmRlcGVuZHQgc3RydWN0dXJlPz8gKi8KCgkvKiBPRE0gU3RydWN0dXJlICovCglzdHJ1Y3QgZmFzdF9hbnRfdHJhaW4gRE1fRmF0VGFibGU7CglzdHJ1Y3QgcnR3X2RpZwlETV9EaWdUYWJsZTsKCXN0cnVjdCBydGxfcHMJRE1fUFNUYWJsZTsKCXN0cnVjdCByeF9ocGMJRE1fUlhIUF9UYWJsZTsKCXN0cnVjdCBmYWxzZV9hbGFybV9zdGF0cyBGYWxzZUFsbUNudDsKCXN0cnVjdCBmYWxzZV9hbGFybV9zdGF0cyBGbGFzZUFsbUNudEJ1ZGR5QWRhcHRlcjsKCXN0cnVjdCBzd19hbnRfc3dpdGNoIERNX1NXQVRfVGFibGU7Cglib29sCQlSU1NJX3Rlc3Q7CgoJc3RydWN0IGVkY2FfdHVyYm8gRE1fRURDQV9UYWJsZTsKCXUzMgkJV01NRURDQV9CRTsKCS8qICBDb3B5IGZyb20gU0Q0IHN0cnVjdHVyZSAqLwoJLyogICovCgkvKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCS8qICAqLwoKCWJvb2wJKnBiRHJpdmVyU3RvcHBlZDsKCWJvb2wJKnBiRHJpdmVySXNHb2luZ1RvUG5wU2V0UG93ZXJTbGVlcDsKCWJvb2wJKnBpbml0X2FkcHRfaW5fcHJvZ3Jlc3M7CgoJLyogUFNEICovCglib29sCWJVc2VyQXNzaWduTGV2ZWw7CglzdHJ1Y3QgdGltZXJfbGlzdCBQU0RUaW1lcjsKCXU4CVJTU0lfQlQ7CQkJLyogY29tZSBmcm9tIEJUICovCglib29sCWJQU0RpblByb2Nlc3M7Cglib29sCWJETUluaXRpYWxHYWluRW5hYmxlOwoKCS8qIGZvciByYXRlIGFkYXB0aXZlLCBpbiBmYWN0LCAgODhjLzkyYyBmdyB3aWxsIGhhbmRsZSB0aGlzICovCgl1OAliVXNlUkFNYXNrOwoKCXN0cnVjdCBvZG1fcmF0ZV9hZGFwdCBSYXRlQWRhcHRpdmU7CgoJc3RydWN0IG9kbV9yZl9jYWwgUkZDYWxpYnJhdGVJbmZvOwoKCS8qICBUWCBwb3dlciB0cmFja2luZyAqLwoJdTgJQmJTd2luZ0lkeE9mZG07Cgl1OAlCYlN3aW5nSWR4T2ZkbUN1cnJlbnQ7Cgl1OAlCYlN3aW5nSWR4T2ZkbUJhc2U7Cglib29sCUJiU3dpbmdGbGFnT2ZkbTsKCXU4CUJiU3dpbmdJZHhDY2s7Cgl1OAlCYlN3aW5nSWR4Q2NrQ3VycmVudDsKCXU4CUJiU3dpbmdJZHhDY2tCYXNlOwoJYm9vbAlCYlN3aW5nRmxhZ0NjazsKCXU4CSptcF9tb2RlOwoJLyogIE9ETSBzeXN0ZW0gcmVzb3VyY2UuICovCgoJLyogIE9ETSByZWxhdGl2ZSB0aW1lLiAqLwoJc3RydWN0IHRpbWVyX2xpc3QgUGF0aERpdlN3aXRjaFRpbWVyOwoJLyogMjAxMS4wOS4yNyBhZGQgZm9yIFBhdGggRGl2ZXJzaXR5ICovCglzdHJ1Y3QgdGltZXJfbGlzdCBDQ0tQYXRoRGl2ZXJzaXR5VGltZXI7CglzdHJ1Y3QgdGltZXJfbGlzdCBGYXN0QW50VHJhaW5pbmdUaW1lcjsKfTsJCS8qICBETV9EeW5hbWljX01lY2hhbmlzbV9TdHJ1Y3R1cmUgKi8KCiNkZWZpbmUgT0RNX1JGX1BBVEhfTUFYIDMKCmVudW0gT0RNX1JGX0NPTlRFTlQgewoJb2RtX3JhZGlvYV90eHQgPSAweDEwMDAsCglvZG1fcmFkaW9iX3R4dCA9IDB4MTAwMSwKCW9kbV9yYWRpb2NfdHh0ID0gMHgxMDAyLAoJb2RtX3JhZGlvZF90eHQgPSAweDEwMDMKfTsKCi8qICBTdGF0dXMgY29kZSAqLwplbnVtIHJ0X3N0YXR1cyB7CglSVF9TVEFUVVNfU1VDQ0VTUywKCVJUX1NUQVRVU19GQUlMVVJFLAoJUlRfU1RBVFVTX1BFTkRJTkcsCglSVF9TVEFUVVNfUkVTT1VSQ0UsCglSVF9TVEFUVVNfSU5WQUxJRF9DT05URVhULAoJUlRfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSLAoJUlRfU1RBVFVTX05PVF9TVVBQT1JULAoJUlRfU1RBVFVTX09TX0FQSV9GQUlMRUQsCn07CgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBESUcgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgplbnVtIGRtX2RpZ19vcCB7CglSVF9UWVBFX1RIUkVTSF9ISUdICT0gMCwKCVJUX1RZUEVfVEhSRVNIX0xPVwk9IDEsCglSVF9UWVBFX0JBQ0tPRkYJCT0gMiwKCVJUX1RZUEVfUlhfR0FJTl9NSU4JPSAzLAoJUlRfVFlQRV9SWF9HQUlOX01BWAk9IDQsCglSVF9UWVBFX0VOQUJMRQkJPSA1LAoJUlRfVFlQRV9ESVNBQkxFCQk9IDYsCglESUdfT1BfVFlQRV9NQVgKfTsKCiNkZWZpbmUJCURNX0RJR19USFJFU0hfSElHSAk0MAojZGVmaW5lCQlETV9ESUdfVEhSRVNIX0xPVwkzNQoKI2RlZmluZQkJRE1fU0NBTl9SU1NJX1RICQkweDE0IC8qIHNjYW4gcmV0dXJuIGlzc3VlIGZvciBMQyAqLwoKCiNkZWZpbmUJCURNX2ZhbHNlX0FMQVJNX1RIUkVTSF9MT1cJNDAwCiNkZWZpbmUJCURNX2ZhbHNlX0FMQVJNX1RIUkVTSF9ISUdICTEwMDAKCiNkZWZpbmUJCURNX0RJR19NQVhfTklDCQkJMHg0ZQojZGVmaW5lCQlETV9ESUdfTUlOX05JQwkJCTB4MWUgLyogMHgyMi8weDFjICovCgojZGVmaW5lCQlETV9ESUdfTUFYX0FQCQkJMHgzMgojZGVmaW5lCQlETV9ESUdfTUlOX0FQCQkJMHgyMAoKI2RlZmluZQkJRE1fRElHX01BWF9OSUNfSFAJCTB4NDYKI2RlZmluZQkJRE1fRElHX01JTl9OSUNfSFAJCTB4MmUKCiNkZWZpbmUJCURNX0RJR19NQVhfQVBfSFAJCTB4NDIKI2RlZmluZQkJRE1fRElHX01JTl9BUF9IUAkJMHgzMAoKLyogdml2aSA5MmMmOTJkIGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbiwgMjAxMTA1MDQgKi8KLyogdGhpcyBpcyBmb3IgOTJjICovCiNkZWZpbmUJCURNX0RJR19GQV9USDAJCQkweDIwMC8qIDB4MjAgKi8KI2RlZmluZQkJRE1fRElHX0ZBX1RIMQkJCTB4MzAwLyogMHgxMDAgKi8KI2RlZmluZQkJRE1fRElHX0ZBX1RIMgkJCTB4NDAwLyogMHgyMDAgKi8KLyogdGhpcyBpcyBmb3IgOTJkICovCiNkZWZpbmUJCURNX0RJR19GQV9USDBfOTJECQkweDEwMAojZGVmaW5lCQlETV9ESUdfRkFfVEgxXzkyRAkJMHg0MDAKI2RlZmluZQkJRE1fRElHX0ZBX1RIMl85MkQJCTB4NjAwCgojZGVmaW5lCQlETV9ESUdfQkFDS09GRl9NQVgJCTEyCiNkZWZpbmUJCURNX0RJR19CQUNLT0ZGX01JTgkJLTQKI2RlZmluZQkJRE1fRElHX0JBQ0tPRkZfREVGQVVMVAkJMTAKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEFHQyBSWCBIaWdoIFBvd2VyIE1vZGUgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUJICBMTkFfTG93X0dhaW5fMQkJMHg2NAojZGVmaW5lCSAgTE5BX0xvd19HYWluXzIJCTB4NUEKI2RlZmluZQkgIExOQV9Mb3dfR2Fpbl8zCQkweDU4CgojZGVmaW5lCSAgRkFfUlhIUF9USDEJCQk1MDAwCiNkZWZpbmUJICBGQV9SWEhQX1RIMgkJCTE1MDAKI2RlZmluZQkgIEZBX1JYSFBfVEgzCQkJODAwCiNkZWZpbmUJICBGQV9SWEhQX1RINAkJCTYwMAojZGVmaW5lCSAgRkFfUlhIUF9USDUJCQk1MDAKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEVEQ0EgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBEeW5hbWljIFR4IFBvd2VyICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBEeW5hbWljIFR4IFBvd2VyIENvbnRyb2wgVGhyZXNob2xkICovCiNkZWZpbmUJCVRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDIJNzQKI2RlZmluZQkJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMQk2NwojZGVmaW5lCQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9BUAkJMHgzRgoKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfTm9ybWFsCQkwCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0xldmVsMQkJMQojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9MZXZlbDIJCTIKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfQlQxCQkzCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0JUMgkJNAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8xNQkJNQojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8zNQkJNgojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF81MAkJNwojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF83MAkJOAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8xMDAJCTkKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIFJhdGUgQWRhcHRpdmUgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiNkZWZpbmUJCURNX1JBVFJfU1RBX0lOSVQJCTAKI2RlZmluZQkJRE1fUkFUUl9TVEFfSElHSAkJMQojZGVmaW5lCQlETV9SQVRSX1NUQV9NSURETEUJCTIKI2RlZmluZQkJRE1fUkFUUl9TVEFfTE9XCQkJMwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQkIgUG93ZXIgU2F2ZSAqLwovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCgplbnVtIGRtXzFyX2NjYSB7CglDQ0FfMVIgPSAwLAoJQ0NBXzJSID0gMSwKCUNDQV9NQVggPSAyLAp9OwoKZW51bSBkbV9yZiB7CglSRl9TYXZlID0gMCwKCVJGX05vcm1hbCA9IDEsCglSRl9NQVggPSAyLAp9OwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgQW50ZW5uYSBEaXZlcnNpdHkgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmVudW0gZG1fc3dhcyB7CglBbnRlbm5hX0EgPSAxLAoJQW50ZW5uYV9CID0gMiwKCUFudGVubmFfTUFYID0gMywKfTsKCi8qICBNYXhpbWFsIG51bWJlciBvZiBhbnRlbm5hIGRldGVjdGlvbiBtZWNoYW5pc20gbmVlZHMgdG8gcGVyZm9ybS4gKi8KI2RlZmluZQlNQVhfQU5URU5OQV9ERVRFQ1RJT05fQ05UCTEwCgovKiAgRXh0ZXJuIEdsb2JhbCBWYXJpYWJsZXMuICovCiNkZWZpbmUJT0ZETV9UQUJMRV9TSVpFXzkyQwkzNwojZGVmaW5lCU9GRE1fVEFCTEVfU0laRV85MkQJNDMKI2RlZmluZQlDQ0tfVEFCTEVfU0laRQkJMzMKCmV4dGVybgl1MzIgT0ZETVN3aW5nVGFibGVbT0ZETV9UQUJMRV9TSVpFXzkyRF07CmV4dGVybgl1OCBDQ0tTd2luZ1RhYmxlX0NoMV9DaDEzW0NDS19UQUJMRV9TSVpFXVs4XTsKZXh0ZXJuCXU4IENDS1N3aW5nVGFibGVfQ2gxNFtDQ0tfVEFCTEVfU0laRV1bOF07CgovKiAgY2hlY2sgU3RhIHBvaW50ZXIgdmFsaWQgb3Igbm90ICovCiNkZWZpbmUgSVNfU1RBX1ZBTElEKHBTdGEpCQkocFN0YSkKLyogIDIwMTAwNTE0IEpvc2VwaDogQWRkIGRlZmluaXRpb24gZm9yIGFudGVubmEgc3dpdGNoaW5nIHRlc3QgYWZ0ZXIgbGluay4gKi8KLyogIFRoaXMgaW5kaWNhdGVzIHR3byBkaWZmZXJlbnQgdGhlIHN0ZXBzLiAqLwovKiAgSW4gU1dBV19TVEVQX1BFQUssIGRyaXZlciBuZWVkcyB0byBzd2l0Y2ggYW50ZW5uYSBhbmQgbGlzdGVuIHRvIHRoZQogKiAgc2lnbmFsIG9uIHRoZSBhaXIuICovCi8qICBJbiBTV0FXX1NURVBfREVURVJNSU5FLCBkcml2ZXIganVzdCBjb21wYXJlcyB0aGUgc2lnbmFsIGNhcHR1cmVkIGluCiAqICBTV0FXX1NURVBfUEVBSyAqLwovKiAgd2l0aCBvcmlnaW5hbCBSU1NJIHRvIGRldGVybWluZSBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gc3dpdGNoIGFudGVubmEuICovCiNkZWZpbmUgU1dBV19TVEVQX1BFQUsJCTAKI2RlZmluZSBTV0FXX1NURVBfREVURVJNSU5FCTEKCiNkZWZpbmUgZG1fQ2hlY2tUWFBvd2VyVHJhY2tpbmcgT0RNX1RYUG93ZXJUcmFja2luZ0NoZWNrCiNkZWZpbmUgZG1fUkZfU2F2aW5nCU9ETV9SRl9TYXZpbmcKCnZvaWQgT0RNX1JGX1NhdmluZyhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwgdTggYkZvcmNlSW5Ob3JtYWwpOwp2b2lkIE9ETV9UWFBvd2VyVHJhY2tpbmdDaGVjayhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSk7CnZvaWQgb2RtX0RJR2J5UlNTSV9MUFMoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwp2b2lkIE9ETV9Xcml0ZV9DQ0tfQ0NBX1RocmVzKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1OCBDdXJDQ0tfQ0NBVGhyZXMpOwpib29sIE9ETV9SQVN0YXRlQ2hlY2soc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHMzMiBSU1NJLAoJCSAgICAgIGJvb2wgYkZvcmNlVXBkYXRlLCB1OCAqcFJBVFJTdGF0ZSk7CnUzMiBDb252ZXJ0VG9fZEIodTMyIFZhbHVlKTsKdTMyIE9ETV9HZXRfUmF0ZV9CaXRtYXAoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHUzMiBtYWNpZCwKCQkJdTMyIHJhX21hc2ssIHU4IHJzc2lfbGV2ZWwpOwp2b2lkIE9ETV9DbW5JbmZvSW5pdChzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwKCQkgICAgIGVudW0gb2RtX2NvbW1vbl9pbmZvX2RlZiBDbW5JbmZvLCB1MzIgVmFsdWUpOwp2b2lkIE9ETV9DbW5JbmZvVXBkYXRlKHN0cnVjdCBvZG1fZG1fc3RydWN0ICpwRE1fT2RtLCB1MzIgQ21uSW5mbywgdTY0IFZhbHVlKTsKdm9pZCBPRE1fQ21uSW5mb0hvb2soc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sCgkJICAgICBlbnVtIG9kbV9jb21tb25faW5mb19kZWYgQ21uSW5mbywgdm9pZCAqcFZhbHVlKTsKdm9pZCBPRE1fQ21uSW5mb1B0ckFycmF5SG9vayhzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSwKCQkJICAgICBlbnVtIG9kbV9jb21tb25faW5mb19kZWYgQ21uSW5mbywKCQkJICAgICB1MTYgSW5kZXgsIHZvaWQgKnBWYWx1ZSk7CnZvaWQgT0RNX0RNSW5pdChzdHJ1Y3Qgb2RtX2RtX3N0cnVjdCAqcERNX09kbSk7CnZvaWQgT0RNX0RNV2F0Y2hkb2coc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0pOwp2b2lkIE9ETV9Xcml0ZV9ESUcoc3RydWN0IG9kbV9kbV9zdHJ1Y3QgKnBETV9PZG0sIHU4IEN1cnJlbnRJR0kpOwoKI2VuZGlmCg==