LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAogKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAqIG1vcmUgZGV0YWlscy4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgojaWZuZGVmCV9fSEFMRE1PVVRTUkNfSF9fCiNkZWZpbmUgX19IQUxETU9VVFNSQ19IX18KCi8qICAqLwovKiAgRGVmaW5pdGlvbiAqLwovKiAgKi8KLyogICovCi8qICAyMDExLzA5LzIyIE1IIERlZmluZSBhbGwgdGVhbSBzdXBwcnQgYWJpbGl0eS4gKi8KLyogICovCgovKiAgKi8KLyogIDIwMTEvMDkvMjIgTUggRGVmaW5lIGZvciBhbGwgdGVhbXMuIFBsZWFzZSBEZWZpbmUgdGhlIGNvbnN0YW4gaW4geW91ciBwcmVjb21wIGhlYWRlci4gKi8KLyogICovCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQVAJCQkwICovCi8qIGRlZmluZQkJRE1fT0RNX1NVUFBPUlRfQURTTAkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9DRQkJCTAgKi8KLyogZGVmaW5lCQlETV9PRE1fU1VQUE9SVF9NUAkJCTEgKi8KCiNkZWZpbmUJVFBfTU9ERQkJMAojZGVmaW5lCVJTU0lfTU9ERQkJMQojZGVmaW5lCVRSQUZGSUNfTE9XCTAKI2RlZmluZQlUUkFGRklDX0hJR0gJMQoKCi8qICAqLwovKiAzIFR4IFBvd2VyIFRyYWNraW5nICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI2RlZmluZQkJRFBLX0RFTFRBX01BUFBJTkdfTlVNCTEzCiNkZWZpbmUJCWluZGV4X21hcHBpbmdfSFBfTlVNCTE1CgoKLyogICovCi8qIDMgUFNEIEhhbmRsZXIgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKI2RlZmluZQlBRkhfUFNECQkxCS8qIDA6bm9ybWFsIFBTRCBzY2FuLCAxOiBvbmx5IGRvIDIwIHB0cyBQU0QgKi8KI2RlZmluZQlNT0RFXzQwTQkJMAkvKiAwOjIwTSwgMTo0ME0gKi8KI2RlZmluZQlQU0RfVEgyCQkzCiNkZWZpbmUJUFNEX0NITUlOCQkyMCAgIC8qICBNaW5pbXVtIGNoYW5uZWwgbnVtYmVyIGZvciBCVCBBRkggKi8KI2RlZmluZQlTSVJfU1RFUF9TSVpFCTMKI2RlZmluZSAgIFNtb290aF9TaXplXzEJCTUKI2RlZmluZQlTbW9vdGhfVEhfMQkzCiNkZWZpbmUgICBTbW9vdGhfU2l6ZV8yCQkxMAojZGVmaW5lCVNtb290aF9USF8yCTQKI2RlZmluZSAgIFNtb290aF9TaXplXzMJCTIwCiNkZWZpbmUJU21vb3RoX1RIXzMJNAojZGVmaW5lICAgU21vb3RoX1N0ZXBfU2l6ZSA1CiNkZWZpbmUJQWRhcHRpdmVfU0lSCTEKI2RlZmluZQlQU0RfUkVTQ0FOCQk0CiNkZWZpbmUJUFNEX1NDQU5fSU5URVJWQUwJNzAwIC8qIG1zICovCgovKiA4NzIzQSBIaWdoIFBvd2VyIElHSSBTZXR0aW5nICovCiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORAkweDIyCiNkZWZpbmUgRE1fRElHX0dtb2RlX0hJR0hfUFdSX0lHSV9MT1dFUl9CT1VORCAweDI4CiNkZWZpbmUgRE1fRElHX0hJR0hfUFdSX1RIUkVTSE9MRAkweDNhCgovKiAgTFBTIGRlZmluZSAqLwojZGVmaW5lIERNX0RJR19GQV9USDBfTFBTCQkJCTQgLyogIDQgaW4gbHBzICovCiNkZWZpbmUgRE1fRElHX0ZBX1RIMV9MUFMJCQkJMTUgLyogIDE1IGxwcyAqLwojZGVmaW5lIERNX0RJR19GQV9USDJfTFBTCQkJCTMwIC8qICAzMCBscHMgKi8KI2RlZmluZSBSU1NJX09GRlNFVF9ESUcJCQkJCTB4MDU7CgovKiBBTlQgVGVzdCAqLwojZGVmaW5lCQkJQU5UVEVTVEFMTAkJMHgwMAkJLyogQW50IEEgb3IgQiB3aWxsIGJlIFRlc3RpbmcgKi8KI2RlZmluZQkJQU5UVEVTVEEJCTB4MDEJCS8qIEFudCBBIHdpbGwgYmUgVGVzdGluZyAqLwojZGVmaW5lCQlBTlRURVNUQgkJMHgwMgkJLyogQW50IEIgd2lsbCBiZSB0ZXN0aW5nICovCgoKLyogICovCi8qICBzdHJ1Y3R1cmUgYW5kIGRlZmluZSAqLwovKiAgKi8KCnN0cnVjdCAgZGlnX3QgewoJdTgJCURpZ19FbmFibGVfRmxhZzsKCXU4CQlEaWdfRXh0X1BvcnRfU3RhZ2U7CgoJaW50CQlSc3NpTG93VGhyZXNoOwoJaW50CQlSc3NpSGlnaFRocmVzaDsKCgl1MzIJCUZBTG93VGhyZXNoOwoJdTMyCQlGQUhpZ2hUaHJlc2g7CgoJdTgJCUN1clNUQUNvbm5lY3RTdGF0ZTsKCXU4CQlQcmVTVEFDb25uZWN0U3RhdGU7Cgl1OAkJQ3VyTXVsdGlTVEFDb25uZWN0U3RhdGU7CgoJdTgJCVByZUlHVmFsdWU7Cgl1OAkJQ3VySUdWYWx1ZTsKCXU4CQlCYWNrdXBJR1ZhbHVlOwoKCXM4CQlCYWNrb2ZmVmFsOwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWF4OwoJczgJCUJhY2tvZmZWYWxfcmFuZ2VfbWluOwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWF4OwoJdTgJCXJ4X2dhaW5fcmFuZ2VfbWluOwoJdTgJCVJzc2lfdmFsX21pbjsKCgl1OAkJUHJlQ0NLX0NDQVRocmVzOwoJdTgJCUN1ckNDS19DQ0FUaHJlczsKCXU4CQlQcmVDQ0tQRFN0YXRlOwoJdTgJCUN1ckNDS1BEU3RhdGU7CgoJdTgJCUxhcmdlRkFIaXQ7Cgl1OAkJRm9yYmlkZGVuSUdJOwoJdTMyCQlSZWNvdmVyX2NudDsKCgl1OAkJRElHX0R5bmFtaWNfTUlOXzA7Cgl1OAkJRElHX0R5bmFtaWNfTUlOXzE7Cglib29sCQliTWVkaWFDb25uZWN0XzA7Cglib29sCQliTWVkaWFDb25uZWN0XzE7CgoJdTMyCQlBbnREaXZfUlNTSV9tYXg7Cgl1MzIJCVJTU0lfbWF4Owp9OwoKc3RydWN0IGR5bmFtaWNfcHdyX3NhdiB7Cgl1OAkJUHJlQ0NBU3RhdGU7Cgl1OAkJQ3VyQ0NBU3RhdGU7CgoJdTgJCVByZVJGU3RhdGU7Cgl1OAkJQ3VyUkZTdGF0ZTsKCglpbnQJCSAgICBSc3NpX3ZhbF9taW47CgoJdTgJCWluaXRpYWxpemU7Cgl1MzIJCVJlZzg3NCxSZWdDNzAsUmVnODVDLFJlZ0E3NDsKfTsKCnN0cnVjdCBmYWxzZV9hbGFybV9zdGF0cyB7Cgl1MzIJQ250X1Bhcml0eV9GYWlsOwoJdTMyCUNudF9SYXRlX0lsbGVnYWw7Cgl1MzIJQ250X0NyYzhfZmFpbDsKCXUzMglDbnRfTWNzX2ZhaWw7Cgl1MzIJQ250X09mZG1fZmFpbDsKCXUzMglDbnRfQ2NrX2ZhaWw7Cgl1MzIJQ250X2FsbDsKCXUzMglDbnRfRmFzdF9Gc3luYzsKCXUzMglDbnRfU0JfU2VhcmNoX2ZhaWw7Cgl1MzIJQ250X09GRE1fQ0NBOwoJdTMyCUNudF9DQ0tfQ0NBOwoJdTMyCUNudF9DQ0FfYWxsOwoJdTMyCUNudF9CV19VU0M7CS8qIEdhcnkgKi8KCXUzMglDbnRfQldfTFNDOwkvKiBHYXJ5ICovCn07CgpzdHJ1Y3QgcHJpX2NjYSB7Cgl1OAkJUHJpQ0NBX2ZsYWc7Cgl1OAkJaW50Zl9mbGFnOwoJdTgJCWludGZfdHlwZTsKCXU4CQlEdXBSVFNfZmxhZzsKCXU4CQlNb25pdG9yX2ZsYWc7Cn07CgpzdHJ1Y3QgcnhfaHAgewoJdTgJCVJYSFBfZmxhZzsKCXU4CQlQU0RfZnVuY190cmlnZ2VyOwoJdTgJCVBTRF9iaXRtYXBfUlhIUFs4MF07Cgl1OAkJUHJlX0lHSTsKCXU4CQlDdXJfSUdJOwoJdTgJCVByZV9wd190aDsKCXU4CQlDdXJfcHdfdGg7Cglib29sCQlGaXJzdF90aW1lX2VudGVyOwoJYm9vbAkJUlhIUF9lbmFibGU7Cgl1OAkJVFBfTW9kZTsKfTsKCiNkZWZpbmUgQVNTT0NJQVRFX0VOVFJZX05VTQkJCQkJMzIgLyogIE1heCBzaXplIG9mIEFzb2NFbnRyeVtdLiAqLwojZGVmaW5lCU9ETV9BU1NPQ0lBVEVfRU5UUllfTlVNCQkJCUFTU09DSUFURV9FTlRSWV9OVU0KCi8qICBUaGlzIGluZGljYXRlcyB0d28gZGlmZmVyZW50IHRoZSBzdGVwcy4gKi8KLyogIEluIFNXQVdfU1RFUF9QRUFLLCBkcml2ZXIgbmVlZHMgdG8gc3dpdGNoIGFudGVubmEgYW5kIGxpc3RlbiB0byB0aGUgc2lnbmFsIG9uIHRoZSBhaXIuICovCi8qICBJbiBTV0FXX1NURVBfREVURVJNSU5FLCBkcml2ZXIganVzdCBjb21wYXJlcyB0aGUgc2lnbmFsIGNhcHR1cmVkIGluIFNXQVdfU1RFUF9QRUFLICovCi8qICB3aXRoIG9yaWdpbmFsIFJTU0kgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBzd2l0Y2ggYW50ZW5uYS4gKi8KI2RlZmluZSBTV0FXX1NURVBfUEVBSwkJMAojZGVmaW5lIFNXQVdfU1RFUF9ERVRFUk1JTkUJMQoKI2RlZmluZQlUUF9NT0RFCQkwCiNkZWZpbmUJUlNTSV9NT0RFCQkxCiNkZWZpbmUJVFJBRkZJQ19MT1cJMAojZGVmaW5lCVRSQUZGSUNfSElHSAkxCgpzdHJ1Y3Qgc3dfYW50X3N3IHsKCXU4CQl0cnlfZmxhZzsKCXMzMgkJUHJlUlNTSTsKCXU4CQlDdXJBbnRlbm5hOwoJdTgJCVByZUFudGVubmE7Cgl1OAkJUlNTSV9Ucnlpbmc7Cgl1OAkJVGVzdE1vZGU7Cgl1OAkJYlRyaWdnZXJBbnRlbm5hU3dpdGNoOwoJdTgJCVNlbGVjdEFudGVubmFNYXA7Cgl1OAkJUlNTSV90YXJnZXQ7CgoJLyogIEJlZm9yZSBsaW5rIEFudGVubmEgU3dpdGNoIGNoZWNrICovCgl1OAkJU1dBU19Ob0xpbmtfU3RhdGU7Cgl1MzIJCVNXQVNfTm9MaW5rX0JLX1JlZzg2MDsKCWJvb2wJCUFOVEFfT047CS8qIFRvIGluZGljYXRlIEFudCBBIGlzIG9yIG5vdCAqLwoJYm9vbAkJQU5UQl9PTjsJLyogVG8gaW5kaWNhdGUgQW50IEIgaXMgb24gb3Igbm90ICovCgoJczMyCQlSU1NJX3N1bV9BOwoJczMyCQlSU1NJX3N1bV9COwoJczMyCQlSU1NJX2NudF9BOwoJczMyCQlSU1NJX2NudF9COwoKCXU2NAkJbGFzdFR4T2tDbnQ7Cgl1NjQJCWxhc3RSeE9rQ250OwoJdTY0CQlUWEJ5dGVDbnRfQTsKCXU2NAkJVFhCeXRlQ250X0I7Cgl1NjQJCVJYQnl0ZUNudF9BOwoJdTY0CQlSWEJ5dGVDbnRfQjsKCXU4CQlUcmFmZmljTG9hZDsKfTsKCnN0cnVjdCBlZGNhX3R1cmJvIHsKCWJvb2wgYkN1cnJlbnRUdXJib0VEQ0E7Cglib29sIGJJc0N1clJETFN0YXRlOwoJdTMyCXBydl90cmFmZmljX2lkeDsgLyogIGVkY2EgdHVyYm8gKi8KfTsKCnN0cnVjdCBvZG1fcmF0ZV9hZGFwdCB7Cgl1OAlUeXBlOwkJLyogIERNX1R5cGVfQnlGVy9ETV9UeXBlX0J5RHJpdmVyICovCgl1OAlIaWdoUlNTSVRocmVzaDsJLyogIGlmIFJTU0kgPiBIaWdoUlNTSVRocmVzaAk9PiBSQVRSU3RhdGUgaXMgRE1fUkFUUl9TVEFfSElHSCAqLwoJdTgJTG93UlNTSVRocmVzaDsJLyogIGlmIFJTU0kgPD0gTG93UlNTSVRocmVzaAk9PiBSQVRSU3RhdGUgaXMgRE1fUkFUUl9TVEFfTE9XICovCgl1OAlSQVRSU3RhdGU7CS8qICBDdXJyZW50IFJTU0kgbGV2ZWwsIERNX1JBVFJfU1RBX0hJR0gvRE1fUkFUUl9TVEFfTUlERExFL0RNX1JBVFJfU1RBX0xPVyAqLwoJdTMyCUxhc3RSQVRSOwkvKiAgUkFUUiBSZWdpc3RlciBDb250ZW50ICovCn07CgojZGVmaW5lIElRS19NQUNfUkVHX05VTQkJNAojZGVmaW5lIElRS19BRERBX1JFR19OVU0JCTE2CiNkZWZpbmUgSVFLX0JCX1JFR19OVU1fTUFYCTEwCiNkZWZpbmUgSVFLX0JCX1JFR19OVU0JCTkKI2RlZmluZSBIUF9USEVSTUFMX05VTQkJOAoKI2RlZmluZSBBVkdfVEhFUk1BTF9OVU0JCTgKI2RlZmluZSBJUUtfTWF0cml4X1JFR19OVU0JOAojZGVmaW5lIElRS19NYXRyaXhfU2V0dGluZ3NfTlVNCTErMjQrMjEKCiNkZWZpbmUJCURNX1R5cGVfQnlGVwkJCTAKI2RlZmluZQkJRE1fVHlwZV9CeURyaXZlcgkJMQoKLyogIERlY2xhcmUgZm9yIGNvbW1vbiBpbmZvICovCgpzdHJ1Y3Qgb2RtX3BoeV9kYmdfaW5mbyB7CgkvKiBPRE0gV3JpdGUsZGVidWcgaW5mbyAqLwoJczgJCVJ4U05SZEJbUkZfUEFUSF9NQVhdOwoJdTY0CQlOdW1RcnlQaHlTdGF0dXM7Cgl1NjQJCU51bVFyeVBoeVN0YXR1c0NDSzsKCXU2NAkJTnVtUXJ5UGh5U3RhdHVzT0ZETTsKCS8qIE90aGVycyAqLwoJczMyCQlSeEVWTVtSRl9QQVRIX01BWF07Cgp9OwoKc3RydWN0IG9kbV9wYWNrZXRfaW5mbyB7Cgl1OAkJUmF0ZTsKCXU4CQlTdGF0aW9uSUQ7Cglib29sCQliUGFja2V0TWF0Y2hCU1NJRDsKCWJvb2wJCWJQYWNrZXRUb1NlbGY7Cglib29sCQliUGFja2V0QmVhY29uOwp9OwoKCmVudW0gewoJLyogIEJCIFRlYW0gKi8KCU9ETV9ESUcJCQk9IDB4MDAwMDAwMDEsCglPRE1fSElHSF9QT1dFUgkJPSAweDAwMDAwMDAyLAoJT0RNX0NDS19DQ0FfVEgJCT0gMHgwMDAwMDAwNCwKCU9ETV9GQV9TVEFUSVNUSUNTCT0gMHgwMDAwMDAwOCwKCU9ETV9SQU1BU0sJCT0gMHgwMDAwMDAxMCwKCU9ETV9SU1NJX01PTklUT1IJPSAweDAwMDAwMDIwLAoJT0RNX1NXX0FOVERJVgkJPSAweDAwMDAwMDQwLAoJT0RNX0hXX0FOVERJVgkJPSAweDAwMDAwMDgwLAoJT0RNX0JCX1BXUlNWCQk9IDB4MDAwMDAxMDAsCglPRE1fMlRQQVRIRElWCQk9IDB4MDAwMDAyMDAsCglPRE1fMVRQQVRIRElWCQk9IDB4MDAwMDA0MDAsCglPRE1fUFNEMkFGSAkJPSAweDAwMDAwODAwCn07CgovKiAgKi8KLyogIDIwMTEvMTAvMjAgTUggRGVmaW5lIENvbW1vbiBpbmZvIGVudW0gZm9yIGFsbCB0ZWFtLiAqLwovKiAgKi8KCmVudW0gb2RtX2NtbmluZm8gewoJLyogIEZpeGVkIHZhbHVlOiAqLwoJLyogICovCgoJT0RNX0NNTklORk9fUExBVEZPUk0gPSAwLAoJT0RNX0NNTklORk9fQUJJTElUWSwJCQkJCS8qICBlbnVtIG9kbV9hYmlsaXR5ICovCglPRE1fQ01OSU5GT19JTlRFUkZBQ0UsCQkJCS8qICBlbnVtIG9kbV9pbnRlcmZhY2VfZGVmICovCglPRE1fQ01OSU5GT19NUF9URVNUX0NISVAsCglPRE1fQ01OSU5GT19JQ19UWVBFLAkJCQkJLyogIGVudW0gb2RtX2ljX3R5cGVfZGVmICovCglPRE1fQ01OSU5GT19DVVRfVkVSLAkJCQkJLyogIGVudW0gb2RtX2N1dF92ZXJzaW9uICovCglPRE1fQ01OSU5GT19GQUJfVkVSLAkJCQkJLyogIGVudW0gb2RtX2ZhYl92ZXJzaW9uICovCglPRE1fQ01OSU5GT19SRl9UWVBFLAkJCQkJLyogIGVudW0gcmZfcGF0aF9kZWYgb3IgZW51bSBvZG1fcmZfdHlwZT8gKi8KCU9ETV9DTU5JTkZPX0JPQVJEX1RZUEUsCQkJCS8qICBlbnVtIG9kbV9ib2FyZF90eXBlICovCglPRE1fQ01OSU5GT19FWFRfTE5BLAkJCQkJLyogIHRydWUgKi8KCU9ETV9DTU5JTkZPX0VYVF9QQSwKCU9ETV9DTU5JTkZPX0VYVF9UUlNXLAoJT0RNX0NNTklORk9fUEFUQ0hfSUQsCQkJCS8qIENVU1RPTUVSIElEICovCglPRE1fQ01OSU5GT19CSU5IQ1RfVEVTVCwKCU9ETV9DTU5JTkZPX0JXSUZJX1RFU1QsCglPRE1fQ01OSU5GT19TTUFSVF9DT05DVVJSRU5ULAoKCgkvKiAgKi8KCS8qICBEeW5hbWljIHZhbHVlOiAqLwoJLyogICovCglPRE1fQ01OSU5GT19NQUNfUEhZX01PREUsCQkJLyogIGVudW0gb2RtX21hY19waHlfbW9kZSAqLwoJT0RNX0NNTklORk9fVFhfVU5JLAoJT0RNX0NNTklORk9fUlhfVU5JLAoJT0RNX0NNTklORk9fV01fTU9ERSwJCQkJLyogIGVudW0gb2RtX3dpcmVsZXNzX21vZGUgKi8KCU9ETV9DTU5JTkZPX0JBTkQsCQkJCQkvKiAgZW51bSBvZG1fYmFuZF90eXBlICovCglPRE1fQ01OSU5GT19TRUNfQ0hOTF9PRkZTRVQsCQkvKiAgZW51bSBvZG1fc2VjX2Nobmxfb2Zmc2V0ICovCglPRE1fQ01OSU5GT19TRUNfTU9ERSwJCQkJLyogIGVudW0gb2RtX3NlY3VyaXR5ICovCglPRE1fQ01OSU5GT19CVywJCQkJCQkvKiAgZW51bSBvZG1fYmFuZF93aWR0aCAqLwoJT0RNX0NNTklORk9fQ0hOTCwKCglPRE1fQ01OSU5GT19ETVNQX0dFVF9WQUxVRSwKCU9ETV9DTU5JTkZPX0JVRERZX0FEQVBUT1IsCglPRE1fQ01OSU5GT19ETVNQX0lTX01BU1RFUiwKCU9ETV9DTU5JTkZPX1NDQU4sCglPRE1fQ01OSU5GT19QT1dFUl9TQVZJTkcsCglPRE1fQ01OSU5GT19PTkVfUEFUSF9DQ0EsCQkJLyogIGVudW0gb2RtX2NjYV9wYXRoICovCglPRE1fQ01OSU5GT19EUlZfU1RPUCwKCU9ETV9DTU5JTkZPX1BOUF9JTiwKCU9ETV9DTU5JTkZPX0lOSVRfT04sCglPRE1fQ01OSU5GT19BTlRfVEVTVCwKCU9ETV9DTU5JTkZPX05FVF9DTE9TRUQsCglPRE1fQ01OSU5GT19NUF9NT0RFLAoKCU9ETV9DTU5JTkZPX1dJRklfRElSRUNULAoJT0RNX0NNTklORk9fV0lGSV9ESVNQTEFZLAoJT0RNX0NNTklORk9fTElOSywKCU9ETV9DTU5JTkZPX1JTU0lfTUlOLAoJT0RNX0NNTklORk9fREJHX0NPTVAsCQkJCS8qICB1NjQgKi8KCU9ETV9DTU5JTkZPX0RCR19MRVZFTCwJCQkJLyogIHUzMiAqLwoJT0RNX0NNTklORk9fUkFfVEhSRVNIT0xEX0hJR0gsCQkvKiAgdTggKi8KCU9ETV9DTU5JTkZPX1JBX1RIUkVTSE9MRF9MT1csCQkvKiAgdTggKi8KCU9ETV9DTU5JTkZPX1JGX0FOVEVOTkFfVFlQRSwJCS8qICB1OCAqLwoJT0RNX0NNTklORk9fQlRfRElTQUJMRUQsCglPRE1fQ01OSU5GT19CVF9PUEVSQVRJT04sCglPRE1fQ01OSU5GT19CVF9ESUcsCglPRE1fQ01OSU5GT19CVF9CVVNZLAkJCQkJLyogQ2hlY2sgQnQgaXMgdXNpbmcgb3Igbm90ICovCglPRE1fQ01OSU5GT19CVF9ESVNBQkxFX0VEQ0EsCgoJLyogICovCgkvKiAgRHluYW1pYyBwdHIgYXJyYXkgaG9vayBpdG1zLiAqLwoJLyogICovCglPRE1fQ01OSU5GT19TVEFfU1RBVFVTLAoJT0RNX0NNTklORk9fUEhZX1NUQVRVUywKCU9ETV9DTU5JTkZPX01BQ19TVEFUVVMsCgoJT0RNX0NNTklORk9fTUFYLAp9OwoKLyogIERlZmluZSBPRE0gc3VwcG9ydCBhYmlsaXR5LiAgT0RNX0NNTklORk9fQUJJTElUWSAqLwplbnVtIHsKCS8qICBCQiBPRE0gc2VjdGlvbiBCSVQgMC0xNSAqLwoJT0RNX0JCX0RJRwkJCQk9IEJJVCgwKSwKCU9ETV9CQl9SQV9NQVNLCQkJCT0gQklUKDEpLAoJT0RNX0JCX0RZTkFNSUNfVFhQV1IJCQk9IEJJVCgyKSwKCU9ETV9CQl9GQV9DTlQJCQkJPSBCSVQoMyksCglPRE1fQkJfUlNTSV9NT05JVE9SCQkJPSBCSVQoNCksCglPRE1fQkJfQ0NLX1BECQkJCT0gQklUKDUpLAoJT0RNX0JCX0FOVF9ESVYJCQkJPSBCSVQoNiksCglPRE1fQkJfUFdSX1NBVkUJCQkJPSBCSVQoNyksCglPRE1fQkJfUFdSX1RSQUlOCQkJPSBCSVQoOCksCglPRE1fQkJfUkFURV9BREFQVElWRQkJCT0gQklUKDkpLAoJT0RNX0JCX1BBVEhfRElWCQkJCT0gQklUKDEwKSwKCU9ETV9CQl9QU0QJCQkJPSBCSVQoMTEpLAoJT0RNX0JCX1JYSFAJCQkJPSBCSVQoMTIpLAoKCS8qICBNQUMgRE0gc2VjdGlvbiBCSVQgMTYtMjMgKi8KCU9ETV9NQUNfRURDQV9UVVJCTwkJCT0gQklUKDE2KSwKCU9ETV9NQUNfRUFSTFlfTU9ERQkJCT0gQklUKDE3KSwKCgkvKiAgUkYgT0RNIHNlY3Rpb24gQklUIDI0LTMxICovCglPRE1fUkZfVFhfUFdSX1RSQUNLCQkJPSBCSVQoMjQpLAoJT0RNX1JGX1JYX0dBSU5fVFJBQ0sJCQk9IEJJVCgyNSksCglPRE1fUkZfQ0FMSUJSQVRJT04JCQk9IEJJVCgyNiksCgp9OwoKLyoJT0RNX0NNTklORk9fSU5URVJGQUNFICovCmVudW0gb2RtX2ludGVyZmFjZV9kZWYgewoJT0RNX0lUUkZfUENJRQk9CTB4MSwKCU9ETV9JVFJGX1VTQgk9CTB4MiwKCU9ETV9JVFJGX1NESU8JPQkweDQsCglPRE1fSVRSRl9BTEwJPQkweDcsCn07CgovKiAgT0RNX0NNTklORk9fSUNfVFlQRSAqLwplbnVtIG9kbV9pY190eXBlX2RlZiB7CglPRE1fUlRMODE5MlMJPQlCSVQoMCksCglPRE1fUlRMODE5MkMJPQlCSVQoMSksCglPRE1fUlRMODE5MkQJPQlCSVQoMiksCglPRE1fUlRMODcyM0EJPQlCSVQoMyksCglPRE1fUlRMODE4OEUJPQlCSVQoNCksCglPRE1fUlRMODgxMgk9CUJJVCg1KSwKCU9ETV9SVEw4ODIxCT0JQklUKDYpLAp9OwoKI2RlZmluZSBPRE1fSUNfMTFOX1NFUklFUwkJCVwKCShPRE1fUlRMODE5MlN8T0RNX1JUTDgxOTJDfE9ETV9SVEw4MTkyRHxPRE1fUlRMODcyM0F8T0RNX1JUTDgxODhFKQojZGVmaW5lIE9ETV9JQ18xMUFDX1NFUklFUwkJKE9ETV9SVEw4ODEyKQoKLyogT0RNX0NNTklORk9fQ1VUX1ZFUiAqLwplbnVtIG9kbV9jdXRfdmVyc2lvbiB7CglPRE1fQ1VUX0EJCT0JMSwKCU9ETV9DVVRfQgkJPQkyLAoJT0RNX0NVVF9DCQk9CTMsCglPRE1fQ1VUX0QJCT0JNCwKCU9ETV9DVVRfRQkJPQk1LAoJT0RNX0NVVF9GCQk9CTYsCglPRE1fQ1VUX1RFU1QJCT0JNywKfTsKCi8qICBPRE1fQ01OSU5GT19GQUJfVkVSICovCmVudW0gb2RtX2ZhYl92ZXJzaW9uIHsKCU9ETV9UU01DCT0JMCwKCU9ETV9VTUMJCT0JMSwKfTsKCi8qICBPRE1fQ01OSU5GT19SRl9UWVBFICovCi8qICBGb3IgZXhhbXBsZSAxVDJSIChBK0FCID0gQklUMHxCSVQ0fEJJVDUpICovCmVudW0gcmZfcGF0aF9kZWYgewoJT0RNX1JGX1RYX0EJPQlCSVQoMCksCglPRE1fUkZfVFhfQgk9CUJJVCgxKSwKCU9ETV9SRl9UWF9DCT0JQklUKDIpLAoJT0RNX1JGX1RYX0QJPQlCSVQoMyksCglPRE1fUkZfUlhfQQk9CUJJVCg0KSwKCU9ETV9SRl9SWF9CCT0JQklUKDUpLAoJT0RNX1JGX1JYX0MJPQlCSVQoNiksCglPRE1fUkZfUlhfRAk9CUJJVCg3KSwKfTsKCgplbnVtIG9kbV9yZl90eXBlIHsKCU9ETV8xVDFSCT0JMCwKCU9ETV8xVDJSCT0JMSwKCU9ETV8yVDJSCT0JMiwKCU9ETV8yVDNSCT0JMywKCU9ETV8yVDRSCT0JNCwKCU9ETV8zVDNSCT0JNSwKCU9ETV8zVDRSCT0JNiwKCU9ETV80VDRSCT0JNywKfTsKCi8qICBPRE0gRHluYW1pYyBjb21tb24gaW5mbyB2YWx1ZSBkZWZpbml0aW9uICovCgplbnVtIG9kbV9tYWNfcGh5X21vZGUgewoJT0RNX1NNU1AJPSAwLAoJT0RNX0RNU1AJPSAxLAoJT0RNX0RNRFAJPSAyLAp9OwoKCmVudW0gb2RtX2J0X2NvZXhpc3QgewoJT0RNX0JUX0JVU1kJCT0gMSwKCU9ETV9CVF9PTgkJPSAyLAoJT0RNX0JUX09GRgkJPSAzLAoJT0RNX0JUX05PTkUJCT0gNCwKfTsKCi8qICBPRE1fQ01OSU5GT19PUF9NT0RFICovCmVudW0gb2RtX29wZXJhdGlvbl9tb2RlIHsKCU9ETV9OT19MSU5LCQk9IEJJVCgwKSwKCU9ETV9MSU5LCQk9IEJJVCgxKSwKCU9ETV9TQ0FOCQk9IEJJVCgyKSwKCU9ETV9QT1dFUlNBVkUJCT0gQklUKDMpLAoJT0RNX0FQX01PREUJCT0gQklUKDQpLAoJT0RNX0NMSUVOVF9NT0RFCQk9IEJJVCg1KSwKCU9ETV9BRF9IT0MJCT0gQklUKDYpLAoJT0RNX1dJRklfRElSRUNUCQk9IEJJVCg3KSwKCU9ETV9XSUZJX0RJU1BMQVkJPSBCSVQoOCksCn07CgovKiAgT0RNX0NNTklORk9fV01fTU9ERSAqLwplbnVtIG9kbV93aXJlbGVzc19tb2RlIHsKCU9ETV9XTV9VTktOT1cJCT0gMHgwLAoJT0RNX1dNX0IJCT0gQklUKDApLAoJT0RNX1dNX0cJCT0gQklUKDEpLAoJT0RNX1dNX0EJCT0gQklUKDIpLAoJT0RNX1dNX04yNEcJCT0gQklUKDMpLAoJT0RNX1dNX041RwkJPSBCSVQoNCksCglPRE1fV01fQVVUTwkJPSBCSVQoNSksCglPRE1fV01fQUMJCT0gQklUKDYpLAp9OwoKLyogIE9ETV9DTU5JTkZPX0JBTkQgKi8KZW51bSBvZG1fYmFuZF90eXBlIHsKCU9ETV9CQU5EXzJfNEcJCT0gQklUKDApLAoJT0RNX0JBTkRfNUcJCT0gQklUKDEpLAoKfTsKCi8qICBPRE1fQ01OSU5GT19TRUNfQ0hOTF9PRkZTRVQgKi8KZW51bSBvZG1fc2VjX2Nobmxfb2Zmc2V0IHsKCU9ETV9ET05UX0NBUkUJCT0gMCwKCU9ETV9CRUxPVwkJPSAxLAoJT0RNX0FCT1ZFCQk9IDIKfTsKCi8qICBPRE1fQ01OSU5GT19CVyAqLwplbnVtIG9kbV9iYW5kX3dpZHRoIHsKCU9ETV9CVzIwTQkJPSAwLAoJT0RNX0JXNDBNCQk9IDEsCglPRE1fQlc4ME0JCT0gMiwKCU9ETV9CVzE2ME0JCT0gMywKCU9ETV9CVzEwTQkJPSA0LAp9OwoKLyogIE9ETV9DTU5JTkZPX0NITkwgKi8KCi8qICBPRE1fQ01OSU5GT19CT0FSRF9UWVBFICovCmVudW0gb2RtX2JvYXJkX3R5cGUgewoJT0RNX0JPQVJEX05PUk1BTAk9IDAsCglPRE1fQk9BUkRfSElHSFBXUgk9IDEsCglPRE1fQk9BUkRfTUlOSUNBUkQJPSAyLAoJT0RNX0JPQVJEX1NMSU0JCT0gMywKCU9ETV9CT0FSRF9DT01CTwkJPSA0LAoKfTsKCi8qICBPRE1fQ01OSU5GT19PTkVfUEFUSF9DQ0EgKi8KZW51bSBvZG1fY2NhX3BhdGggewoJT0RNX0NDQV8yUgkJCT0gMCwKCU9ETV9DQ0FfMVJfQQkJCT0gMSwKCU9ETV9DQ0FfMVJfQgkJCT0gMiwKfTsKCnN0cnVjdCBpcWtfbWF0cml4X3JlZ3Nfc2V0IHsKCWJvb2wJYklRS0RvbmU7CglzMzIJVmFsdWVbMV1bSVFLX01hdHJpeF9SRUdfTlVNXTsKfTsKCnN0cnVjdCBvZG1fcmZfY2FsX3QgewoJLyogZm9yIHR4IHBvd2VyIHRyYWNraW5nICovCgoJdTMyCVJlZ0EyNDsgLyogIGZvciBUZW1wQ0NLICovCglzMzIJUmVnRTk0OwoJczMyCVJlZ0U5QzsKCXMzMglSZWdFQjQ7CglzMzIJUmVnRUJDOwoKCS8qIHU4IGJUWFBvd2VyVHJhY2tpbmc7ICovCgl1OAkJVFhQb3dlcmNvdW50OwoJYm9vbCBiVFhQb3dlclRyYWNraW5nSW5pdDsKCWJvb2wgYlRYUG93ZXJUcmFja2luZzsKCXU4CQlUeFBvd2VyVHJhY2tDb250cm9sOyAvKiBmb3IgbXAgbW9kZSwgdHVybiBvZmYgdHhwd3J0cmFja2luZyBhcyBkZWZhdWx0ICovCgl1OAkJVE1fVHJpZ2dlcjsKCXU4CQlJbnRlcm5hbFBBNUdbMl07CS8qIHBhdGhBIC8gcGF0aEIgKi8KCgl1OAkJVGhlcm1hbE1ldGVyWzJdOyAgICAvKiAgVGhlcm1hbE1ldGVyLCBpbmRleCAwIGZvciBSRklDMCwgYW5kIDEgZm9yIFJGSUMxICovCgl1OAkJVGhlcm1hbFZhbHVlOwoJdTgJCVRoZXJtYWxWYWx1ZV9MQ0s7Cgl1OAkJVGhlcm1hbFZhbHVlX0lRSzsKCXU4CVRoZXJtYWxWYWx1ZV9EUEs7Cgl1OAlUaGVybWFsVmFsdWVfQVZHW0FWR19USEVSTUFMX05VTV07Cgl1OAlUaGVybWFsVmFsdWVfQVZHX2luZGV4OwoJdTgJVGhlcm1hbFZhbHVlX1J4R2FpbjsKCXU4CVRoZXJtYWxWYWx1ZV9DcnlzdGFsOwoJdTgJVGhlcm1hbFZhbHVlX0RQS3N0b3JlOwoJdTgJVGhlcm1hbFZhbHVlX0RQS3RyYWNrOwoJYm9vbAlUeFBvd2VyVHJhY2tpbmdJblByb2dyZXNzOwoJYm9vbAliRFBLZW5hYmxlOwoKCWJvb2wJYlJlbG9hZHR4cG93ZXJpbmRleDsKCXU4CWJSZlBpRW5hYmxlOwoJdTMyCVRYUG93ZXJUcmFja2luZ0NhbGxiYWNrQ250OyAvKiBjb3NhIGFkZCBmb3IgZGVidWcgKi8KCgl1OAliQ0NLaW5DSDE0OwoJdTgJQ0NLX2luZGV4OwoJdTgJT0ZETV9pbmRleFsyXTsKCWJvb2wgYkRvbmVUeHBvd2VyOwoKCXU4CVRoZXJtYWxWYWx1ZV9IUFtIUF9USEVSTUFMX05VTV07Cgl1OAlUaGVybWFsVmFsdWVfSFBfaW5kZXg7CglzdHJ1Y3QgaXFrX21hdHJpeF9yZWdzX3NldCBJUUtNYXRyaXhSZWdTZXR0aW5nW0lRS19NYXRyaXhfU2V0dGluZ3NfTlVNXTsKCgl1OAlEZWx0YV9JUUs7Cgl1OAlEZWx0YV9MQ0s7CgoJLyogZm9yIElRSyAqLwoJdTMyCVJlZ0MwNDsKCXUzMglSZWc4NzQ7Cgl1MzIJUmVnQzA4OwoJdTMyCVJlZ0I2ODsKCXUzMglSZWdCNkM7Cgl1MzIJUmVnODcwOwoJdTMyCVJlZzg2MDsKCXUzMglSZWc4NjQ7CgoJYm9vbAliSVFLSW5pdGlhbGl6ZWQ7Cglib29sIGJMQ0tJblByb2dyZXNzOwoJYm9vbAliQW50ZW5uYURldGVjdGVkOwoJdTMyCUFEREFfYmFja3VwW0lRS19BRERBX1JFR19OVU1dOwoJdTMyCUlRS19NQUNfYmFja3VwW0lRS19NQUNfUkVHX05VTV07Cgl1MzIJSVFLX0JCX2JhY2t1cF9yZWNvdmVyWzldOwoJdTMyCUlRS19CQl9iYWNrdXBbSVFLX0JCX1JFR19OVU1dOwoKCS8qIGZvciBBUEsgKi8KCXUzMglBUEtvdXRwdXRbMl1bMl07IC8qIHBhdGggQS9COyBvdXRwdXQxXzFhL291dHB1dDFfMmEgKi8KCXU4CWJBUEtkb25lOwoJdTgJYkFQS1RoZXJtYWxNZXRlcklnbm9yZTsKCXU4CWJEUGRvbmU7Cgl1OAliRFBQYXRoQU9LOwoJdTgJYkRQUGF0aEJPSzsKfTsKCi8qICBPRE0gRHluYW1pYyBjb21tb24gaW5mbyB2YWx1ZSBkZWZpbml0aW9uICovCnN0cnVjdCBvZG1fZmF0X3QgewoJdTgJQnNzaWRbNl07Cgl1OAlhbnRzZWxfcnhfa2VlcF8wOwoJdTgJYW50c2VsX3J4X2tlZXBfMTsKCXU4CWFudHNlbF9yeF9rZWVwXzI7Cgl1MzIJYW50U3VtUlNTSVs3XTsKCXUzMglhbnRSU1NJY250WzddOwoJdTMyCWFudEF2ZVJTU0lbN107Cgl1OAlGQVRfU3RhdGU7Cgl1MzIJVHJhaW5JZHg7Cgl1OAlhbnRzZWxfYVtPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlhbnRzZWxfYltPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1OAlhbnRzZWxfY1tPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07Cgl1MzIJTWFpbkFudF9TdW1bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCUF1eEFudF9TdW1bT0RNX0FTU09DSUFURV9FTlRSWV9OVU1dOwoJdTMyCU1haW5BbnRfQ250W09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXUzMglBdXhBbnRfQ250W09ETV9BU1NPQ0lBVEVfRU5UUllfTlVNXTsKCXU4CVJ4SWRsZUFudDsKCWJvb2wJYkJlY29tZUxpbmtlZDsKfTsKCmVudW0gZmF0X3N0YXRlIHsKCUZBVF9OT1JNQUxfU1RBVEUJCT0gMCwKCUZBVF9UUkFJTklOR19TVEFURQkJPSAxLAp9OwoKZW51bSBhbnRfZGlmX3R5cGUgewoJTk9fQU5URElWCQkJPSAweEZGLAoJQ0dfVFJYX0hXX0FOVERJVgkJPSAweDAxLAoJQ0dDU19SWF9IV19BTlRESVYJCT0gMHgwMiwKCUZJWEVEX0hXX0FOVERJVgkJCT0gMHgwMywKCUNHX1RSWF9TTUFSVF9BTlRESVYJCT0gMHgwNCwKCUNHQ1NfUlhfU1dfQU5URElWCQk9IDB4MDUsCn07CgovKiAgMjAxMS8wOS8yMiBNSCBDb3B5IGZyb20gU0Q0IGRlZmluZWQgc3RydWN0dXJlLiBXZSB1c2UgdG8gc3VwcG9ydCBQSFkgRE0gaW50ZWdyYXRpb24uICovCnN0cnVjdCBkbV9vZG1fdCB7CgkvKiAgKi8KCS8qCUFkZCBmb3IgZGlmZmVyZW50IHRlYW0gdXNlIHRlbXBvcmFyaWx5ICovCgkvKiAgKi8KCXN0cnVjdCBydHdfYWRhcHRlcgkqQWRhcHRlcjsJCS8qICBGb3IgQ0UvTklDIHRlYW0gKi8KCgl1NjQJCQlEZWJ1Z0NvbXBvbmVudHM7Cgl1MzIJCQlEZWJ1Z0xldmVsOwoKLyogIE9ETSBIQU5ETEUsIERSSVZFUiBORUVEUyBOT1QgVE8gSE9PSy0tLS0tLSAqLwoJYm9vbAkJCWJDY2tIaWdoUG93ZXI7Cgl1OAkJCVJGUGF0aFJ4RW5hYmxlOwkJLyogIE9ETV9DTU5JTkZPX1JGUEFUSF9FTkFCTEUgKi8KCXU4CQkJQ29udHJvbENoYW5uZWw7Ci8qICBPRE0gSEFORExFLCBEUklWRVIgTkVFRFMgTk9UIFRPIEhPT0stLS0tLS0gKi8KCi8qIDEgIENPTU1PTiBJTkZPUk1BVElPTiAqLwoKCS8qICBJbml0IFZhbHVlICovCi8qIEhPT0sgQkVGT1JFIFJFRyBJTklULS0tLS0tLS0tLS0gKi8KCS8qICBPRE0gU3VwcG9ydCBBYmlsaXR5IERJRy9SQVRSL1RYX1BXUl9UUkFDSy8goUuhSyA9IDEvMi8zL6FLICovCgl1MzIJCQlTdXBwb3J0QWJpbGl0eTsKCS8qICBPRE0gUENJRS9VU0IvU0RJTy9HU1BJID0gMC8xLzIvMyAqLwoJdTgJCQlTdXBwb3J0SW50ZXJmYWNlOwoJLyogIE9ETSBjb21wb3NpdGUgb3IgaW5kZXBlbmRlbnQuIEJpdCBvcmllbnRlZC8gOTJDKzkyRCsgLi4uLiBvciBhbnkgb3RoZXIgdHlwZSA9IDEvMi8zLy4uLiAqLwoJdTMyCQkJU3VwcG9ydElDVHlwZTsKCS8qICBDdXQgVmVyc2lvbiBUZXN0Q2hpcC9BLWN1dC9CLWN1dC4uLiA9IDAvMS8yLzMvLi4uICovCgl1OAkJCUN1dFZlcnNpb247CgkvKiAgRmFiIFZlcnNpb24gVFNNQy9VTUMgPSAwLzEgKi8KCXU4CQkJRmFiVmVyc2lvbjsKCS8qICBSRiBUeXBlIDRUNFIvM1QzUi8yVDJSLzFUMlIvMVQxUi8uLi4gKi8KCXU4CQkJUkZUeXBlOwoJLyogIEJvYXJkIFR5cGUgTm9ybWFsL0hpZ2hQb3dlci9NaW5pQ2FyZC9TTElNL0NvbWJvLy4uLiA9IDAvMS8yLzMvNC8uLi4gKi8KCXU4CQkJQm9hcmRUeXBlOwoJLyogIHdpdGggZXh0ZXJuYWwgTE5BICBOTy9ZZXMgPSAwLzEgKi8KCXU4CQkJRXh0TE5BOwoJLyogIHdpdGggZXh0ZXJuYWwgUEEgIE5PL1llcyA9IDAvMSAqLwoJdTgJCQlFeHRQQTsKCS8qICB3aXRoIGV4dGVybmFsIFRSU1cgIE5PL1llcyA9IDAvMSAqLwoJdTgJCQlFeHRUUlNXOwoJdTgJCQlQYXRjaElEOyAvKiBDdXN0b21lciBJRCAqLwoJYm9vbAkJCWJJbkhjdFRlc3Q7Cglib29sCQkJYldJRklUZXN0OwoKCWJvb2wJCQliRHVhbE1hY1NtYXJ0Q29uY3VycmVudDsKCXUzMgkJCUJLX1N1cHBvcnRBYmlsaXR5OwoJdTgJCQlBbnREaXZUeXBlOwovKiBIT09LIEJFRk9SRSBSRUcgSU5JVC0tLS0tLS0tLS0tICovCgoJLyogICovCgkvKiAgRHluYW1pYyBWYWx1ZSAqLwoJLyogICovCi8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgoJdTgJCQl1OF90ZW1wOwoJYm9vbAkJCWJvb2xfdGVtcDsKCXN0cnVjdCBydHdfYWRhcHRlcgkqUEFEQVBURVJfdGVtcDsKCgkvKiAgTUFDIFBIWSBNb2RlIFNNU1AvRE1TUC9ETURQID0gMC8xLzIgKi8KCXU4CQkJKnBNYWNQaHlNb2RlOwoJLyogVFggVW5pY2FzdCBieXRlIGNvdW50ICovCgl1NjQJCQkqcE51bVR4Qnl0ZXNVbmljYXN0OwoJLyogUlggVW5pY2FzdCBieXRlIGNvdW50ICovCgl1NjQJCQkqcE51bVJ4Qnl0ZXNVbmljYXN0OwoJLyogIFdpcmVsZXNzIG1vZGUgQi9HL0EvTiA9IEJJVDAvQklUMS9CSVQyL0JJVDMgKi8KCXU4CQkJKnBXaXJlbGVzc01vZGU7IC8qIGVudW0gb2RtX3dpcmVsZXNzX21vZGUgKi8KCS8qICBGcmVxdWVuY2UgYmFuZCAyLjRHLzVHID0gMC8xICovCgl1OAkJCSpwQmFuZFR5cGU7CgkvKiAgU2Vjb25kYXJ5IGNoYW5uZWwgb2Zmc2V0IGRvbid0X2NhcmUvYmVsb3cvYWJvdmUgPSAwLzEvMiAqLwoJdTgJCQkqcFNlY0NoT2Zmc2V0OwoJLyogIFNlY3VyaXR5IG1vZGUgT3Blbi9XRVAvQUVTL1RLSVAgPSAwLzEvMi8zICovCgl1OAkJCSpwU2VjdXJpdHk7CgkvKiAgQlcgaW5mbyAyME0vNDBNLzgwTSA9IDAvMS8yICovCgl1OAkJCSpwQmFuZFdpZHRoOwoJLyogIENlbnRyYWwgY2hhbm5lbCBsb2NhdGlvbiBDaDEvQ2gyLy4uLi4gKi8KCXU4CQkJKnBDaGFubmVsOwkvKiBjZW50cmFsIGNoYW5uZWwgbnVtYmVyICovCgkvKiAgQ29tbW9uIGluZm8gZm9yIDkyRCBETVNQICovCgoJYm9vbAkJCSpwYkdldFZhbHVlRnJvbU90aGVyTWFjOwoJc3RydWN0IHJ0d19hZGFwdGVyCSoqcEJ1ZGR5QWRhcHRlcjsKCWJvb2wJCQkqcGJNYXN0ZXJPZkRNU1A7IC8qIE1BQzA6IG1hc3RlciwgTUFDMTogc2xhdmUgKi8KCS8qICBDb21tb24gaW5mbyBmb3IgU3RhdHVzICovCglib29sCQkJKnBiU2NhbkluUHJvY2VzczsKCWJvb2wJCQkqcGJQb3dlclNhdmluZzsKCS8qICBDQ0EgUGF0aCAyLXBhdGgvcGF0aC1BL3BhdGgtQiA9IDAvMS8yOyB1c2luZyBlbnVtIG9kbV9jY2FfcGF0aC4gKi8KCXU4CQkJKnBPbmVQYXRoQ0NBOwoJLyogcE1nbnRJbmZvLT5BbnRlbm5hVGVzdCAqLwoJdTgJCQkqcEFudGVubmFUZXN0OwoJYm9vbAkJCSpwYk5ldF9jbG9zZWQ7Ci8qICBQT0lOVEVSIFJFRkVSRU5DRS0tLS0tLS0tLS0tICovCgkvKiAgKi8KLyogQ0FMTCBCWSBWQUxVRS0tLS0tLS0tLS0tLS0gKi8KCWJvb2wJCQliV0lGSV9EaXJlY3Q7Cglib29sCQkJYldJRklfRGlzcGxheTsKCWJvb2wJCQliTGlua2VkOwoJdTgJCQlSU1NJX01pbjsKCXU4CQkJSW50ZXJmYWNlSW5kZXg7IC8qICBBZGQgZm9yIDkyRCAgZHVhbCBNQUM6IDAtLU1hYzAgMS0tTWFjMSAqLwoJYm9vbAkJYklzTVBDaGlwOwoJYm9vbAkJCWJPbmVFbnRyeU9ubHk7CgkvKiAgQ29tbW9uIGluZm8gZm9yIEJURE0gKi8KCWJvb2wJCQliQnREaXNhYmxlZDsJCQkvKiAgQlQgaXMgZGlzYWJsZWQgKi8KCWJvb2wJCQliQnRIc09wZXJhdGlvbjsJCS8qICBCVCBIUyBtb2RlIGlzIHVuZGVyIHByb2dyZXNzICovCgl1OAkJCWJ0SHNEaWdWYWw7CQkJLyogIHVzZSBCVCByc3NpIHRvIGRlY2lkZSB0aGUgRElHIHZhbHVlICovCglib29sCQkJYkJ0RGlzYWJsZUVkY2FUdXJibzsJLyogIFVuZGVyIHNvbWUgY29uZGl0aW9uLCBkb24ndCBlbmFibGUgdGhlIEVEQ0EgVHVyYm8gKi8KCWJvb2wJCQliQnRCdXN5OwkJCS8qICBCVCBpcyBidXN5LiAqLwovKiBDQUxMIEJZIFZBTFVFLS0tLS0tLS0tLS0tLSAqLwoKCS8qIDIgRGVmaW5lIFNUQSBpbmZvLiAqLwoJLyogIF9PRE1fU1RBX0lORk8gKi8KCS8qICAyMDEyLzAxLzEyIE1IIEZvciBNUCwgd2UgbmVlZCB0byByZWR1Y2Ugb25lIGFycmF5IHBvaW50ZXIgZm9yIGRlZmF1bHQgcG9ydC4/PyAqLwoJc3RydWN0IHN0YV9pbmZvICoJCXBPRE1fU3RhSW5mb1tPRE1fQVNTT0NJQVRFX0VOVFJZX05VTV07CgoJLyogICovCgkvKiAgMjAxMi8wMi8xNCBNSCBBZGQgdG8gc2hhcmUgODhFIHJhIHdpdGggb3RoZXIgU1cgdGVhbS4gKi8KCS8qICBXZSBuZWVkIHRvIGNvbGVsY3QgYWxsIHN1cHBvcnQgYWJpbGl0IHRvIGEgcHJvcGVyIGFyZWEuICovCgkvKiAgKi8KCWJvb2wJCQkJUmFTdXBwb3J0ODhFOwoKCS8qICBEZWZpbmUgLi4uLi4uLi4uLi4gKi8KCgkvKiAgTGF0ZXN0IHBhY2tldCBwaHkgaW5mbyAoT0RNIHdyaXRlKSAqLwoJc3RydWN0IG9kbV9waHlfZGJnX2luZm8JIFBoeURiZ0luZm87CgkvKiBQSFlfSU5GT184OEUJCVBoeUluZm87ICovCgoJLyogIExhdGVzdCBwYWNrZXQgcGh5IGluZm8gKE9ETSB3cml0ZSkgKi8KCS8qIE1BQ19JTkZPXzg4RQkJTWFjSW5mbzsgKi8KCgkvKiAgRGlmZmVyZW50IFRlYW0gaW5kZXBlbmR0IHN0cnVjdHVyZT8/ICovCgoJLyogICovCgkvKiBUWF9SVFBfQ01OCQlUWF9yZXRycG87ICovCgkvKiBUWF9SVFBfODhFCQlUWF9yZXRycG87ICovCgkvKiBUWF9SVFBfODE5NQkJVFhfcmV0cnBvOyAqLwoKCS8qICAqLwoJLyogT0RNIFN0cnVjdHVyZSAqLwoJLyogICovCglzdHJ1Y3Qgb2RtX2ZhdF90CQlETV9GYXRUYWJsZTsKCXN0cnVjdCBkaWdfdAlETV9EaWdUYWJsZTsKCXN0cnVjdCBkeW5hbWljX3B3cl9zYXYJCURNX1BTVGFibGU7CglzdHJ1Y3QgcHJpX2NjYQlETV9QcmlDQ0E7CglzdHJ1Y3QgcnhfaHAJCURNX1JYSFBfVGFibGU7CglzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMJRmFsc2VBbG1DbnQ7CglzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdHMJRmxhc2VBbG1DbnRCdWRkeUFkYXB0ZXI7CglzdHJ1Y3Qgc3dfYW50X3N3CQlETV9TV0FUX1RhYmxlOwoJYm9vbAkJUlNTSV90ZXN0OwoKCXN0cnVjdCBlZGNhX3R1cmJvCQlETV9FRENBX1RhYmxlOwoJdTMyCQlXTU1FRENBX0JFOwoJLyogIENvcHkgZnJvbSBTRDQgc3RydWN0dXJlICovCgkvKiAgKi8KCS8qICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoJLyogICovCgoJLyogY29tbW9uICovCglib29sCQkJKnBiRHJpdmVyU3RvcHBlZDsKCWJvb2wJCQkqcGJEcml2ZXJJc0dvaW5nVG9QbnBTZXRQb3dlclNsZWVwOwoJYm9vbAkJCSpwaW5pdF9hZHB0X2luX3Byb2dyZXNzOwoKCS8qIFBTRCAqLwoJYm9vbAkJCWJVc2VyQXNzaWduTGV2ZWw7Cgl1OAkJCVJTU0lfQlQ7CQkJLyogY29tZSBmcm9tIEJUICovCglib29sCQkJYlBTRGluUHJvY2VzczsKCWJvb2wJCQliRE1Jbml0aWFsR2FpbkVuYWJsZTsKCgkvKiBmb3IgcmF0ZSBhZGFwdGl2ZSwgaW4gZmFjdCwgIDg4Yy85MmMgZncgd2lsbCBoYW5kbGUgdGhpcyAqLwoJdTgJCQliVXNlUkFNYXNrOwoKCXN0cnVjdCBvZG1fcmF0ZV9hZGFwdAlSYXRlQWRhcHRpdmU7CgoKCXN0cnVjdCBvZG1fcmZfY2FsX3QJUkZDYWxpYnJhdGVJbmZvOwoKCS8qICAqLwoJLyogIFRYIHBvd2VyIHRyYWNraW5nICovCgkvKiAgKi8KCXU4CQkJQmJTd2luZ0lkeE9mZG07Cgl1OAkJCUJiU3dpbmdJZHhPZmRtQ3VycmVudDsKCXU4CQkJQmJTd2luZ0lkeE9mZG1CYXNlOwoJYm9vbAkJCUJiU3dpbmdGbGFnT2ZkbTsKCXU4CQkJQmJTd2luZ0lkeENjazsKCXU4CQkJQmJTd2luZ0lkeENja0N1cnJlbnQ7Cgl1OAkJCUJiU3dpbmdJZHhDY2tCYXNlOwoJYm9vbAkJCUJiU3dpbmdGbGFnQ2NrOwoJLyogICovCgkvKiAgT0RNIHN5c3RlbSByZXNvdXJjZS4gKi8KCS8qICAqLwp9OwkvKiAgRE1fRHluYW1pY19NZWNoYW5pc21fU3RydWN0dXJlICovCgplbnVtIG9kbV9yZl9jb250ZW50IHsKCW9kbV9yYWRpb2FfdHh0ID0gMHgxMDAwLAoJb2RtX3JhZGlvYl90eHQgPSAweDEwMDEsCglvZG1fcmFkaW9jX3R4dCA9IDB4MTAwMiwKCW9kbV9yYWRpb2RfdHh0ID0gMHgxMDAzCn07CgplbnVtIG9kbV9iYl9jb25maWdfdHlwZSB7CiAgICBDT05GSUdfQkJfUEhZX1JFRywKICAgIENPTkZJR19CQl9BR0NfVEFCLAogICAgQ09ORklHX0JCX0FHQ19UQUJfMkcsCiAgICBDT05GSUdfQkJfQUdDX1RBQl81RywKICAgIENPTkZJR19CQl9QSFlfUkVHX1BHLAp9OwoKLyogIFN0YXR1cyBjb2RlICovCmVudW0gcnRfc3RhdHVzIHsKCVJUX1NUQVRVU19TVUNDRVNTLAoJUlRfU1RBVFVTX0ZBSUxVUkUsCglSVF9TVEFUVVNfUEVORElORywKCVJUX1NUQVRVU19SRVNPVVJDRSwKCVJUX1NUQVRVU19JTlZBTElEX0NPTlRFWFQsCglSVF9TVEFUVVNfSU5WQUxJRF9QQVJBTUVURVIsCglSVF9TVEFUVVNfTk9UX1NVUFBPUlQsCglSVF9TVEFUVVNfT1NfQVBJX0ZBSUxFRCwKfTsKCi8qIGluY2x1ZGUgIm9kbV9mdW5jdGlvbi5oIiAqLwoKLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIDMgRElHICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKZW51bSBkbV9kaWdfb3AgewoJRElHX1RZUEVfVEhSRVNIX0hJR0gJPSAwLAoJRElHX1RZUEVfVEhSRVNIX0xPVwk9IDEsCglESUdfVFlQRV9CQUNLT0ZGCQk9IDIsCglESUdfVFlQRV9SWF9HQUlOX01JTgk9IDMsCglESUdfVFlQRV9SWF9HQUlOX01BWAk9IDQsCglESUdfVFlQRV9FTkFCTEUJCQk9IDUsCglESUdfVFlQRV9ESVNBQkxFCQk9IDYsCglESUdfT1BfVFlQRV9NQVgKfTsKCiNkZWZpbmUJCURNX0RJR19USFJFU0hfSElHSAkJCTQwCiNkZWZpbmUJCURNX0RJR19USFJFU0hfTE9XCQkJMzUKCiNkZWZpbmUJCURNX1NDQU5fUlNTSV9USAkJCQkweDE0IC8qIHNjYW4gcmV0dXJuIGlzc3VlIGZvciBMQyAqLwoKCiNkZWZpbmUJCURNX0ZBTFNFQUxBUk1fVEhSRVNIX0xPVwk0MDAKI2RlZmluZQkJRE1fRkFMU0VBTEFSTV9USFJFU0hfSElHSAkxMDAwCgojZGVmaW5lCQlETV9ESUdfTUFYX05JQwkJCQkweDRlCiNkZWZpbmUJCURNX0RJR19NSU5fTklDCQkJCTB4MWUKCiNkZWZpbmUJCURNX0RJR19NQVhfQVAJCQkJMHgzMgojZGVmaW5lCQlETV9ESUdfTUlOX0FQCQkJCTB4MjAKCiNkZWZpbmUJCURNX0RJR19NQVhfTklDX0hQCQkJMHg0NgojZGVmaW5lCQlETV9ESUdfTUlOX05JQ19IUAkJCTB4MmUKCiNkZWZpbmUJCURNX0RJR19NQVhfQVBfSFAJCQkJMHg0MgojZGVmaW5lCQlETV9ESUdfTUlOX0FQX0hQCQkJCTB4MzAKCi8qIHZpdmkgOTJjJjkyZCBoYXMgZGlmZmVyZW50IGRlZmluaXRpb24sIDIwMTEwNTA0ICovCi8qIHRoaXMgaXMgZm9yIDkyYyAqLwojZGVmaW5lCQlETV9ESUdfRkFfVEgwCQkJCTB4MjAwCiNkZWZpbmUJCURNX0RJR19GQV9USDEJCQkJMHgzMDAKI2RlZmluZQkJRE1fRElHX0ZBX1RIMgkJCQkweDQwMAovKiB0aGlzIGlzIGZvciA5MmQgKi8KI2RlZmluZQkJRE1fRElHX0ZBX1RIMF85MkQJCQkweDEwMAojZGVmaW5lCQlETV9ESUdfRkFfVEgxXzkyRAkJCTB4NDAwCiNkZWZpbmUJCURNX0RJR19GQV9USDJfOTJECQkJMHg2MDAKCiNkZWZpbmUJCURNX0RJR19CQUNLT0ZGX01BWAkJCTEyCiNkZWZpbmUJCURNX0RJR19CQUNLT0ZGX01JTgkJCS00CiNkZWZpbmUJCURNX0RJR19CQUNLT0ZGX0RFRkFVTFQJCTEwCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBBR0MgUlggSGlnaCBQb3dlciBNb2RlICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwojZGVmaW5lICAgICAgICAgIExOQV9Mb3dfR2Fpbl8xICAgICAgICAgICAgICAgICAgICAgIDB4NjQKI2RlZmluZSAgICAgICAgICBMTkFfTG93X0dhaW5fMiAgICAgICAgICAgICAgICAgICAgICAweDVBCiNkZWZpbmUgICAgICAgICAgTE5BX0xvd19HYWluXzMgICAgICAgICAgICAgICAgICAgICAgMHg1OAoKI2RlZmluZSAgICAgICAgICBGQV9SWEhQX1RIMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMDAKI2RlZmluZSAgICAgICAgICBGQV9SWEhQX1RIMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MDAKI2RlZmluZSAgICAgICAgICBGQV9SWEhQX1RIMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODAwCiNkZWZpbmUgICAgICAgICAgRkFfUlhIUF9USDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYwMAojZGVmaW5lICAgICAgICAgIEZBX1JYSFBfVEg1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDAKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEVEQ0EgKi8KLyogMz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBEeW5hbWljIFR4IFBvd2VyICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBEeW5hbWljIFR4IFBvd2VyIENvbnRyb2wgVGhyZXNob2xkICovCiNkZWZpbmUJCVRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDIJNzQKI2RlZmluZQkJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMQk2NwojZGVmaW5lCQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9BUAkJMHgzRgoKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfTm9ybWFsCQkwCiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsX0xldmVsMQkJMQojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9MZXZlbDIJCTIKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfQlQxCQkJMwojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF9CVDIJCQk0CiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsXzE1CQkJNQojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8zNQkJCTYKI2RlZmluZQkJVHhIaWdoUHdyTGV2ZWxfNTAJCQk3CiNkZWZpbmUJCVR4SGlnaFB3ckxldmVsXzcwCQkJOAojZGVmaW5lCQlUeEhpZ2hQd3JMZXZlbF8xMDAJCQk5CgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBSYXRlIEFkYXB0aXZlICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwojZGVmaW5lCQlETV9SQVRSX1NUQV9JTklUCQkJMAojZGVmaW5lCQlETV9SQVRSX1NUQV9ISUdICQkJMQojZGVmaW5lCQkJRE1fUkFUUl9TVEFfTUlERExFCQkyCiNkZWZpbmUJCQlETV9SQVRSX1NUQV9MT1cJCQkzCgovKiAzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogMyBCQiBQb3dlciBTYXZlICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKCmVudW0gZG1fMXJfY2NhIHsKCUNDQV8xUiA9MCwKCUNDQV8yUiA9IDEsCglDQ0FfTUFYID0gMiwKfTsKCmVudW0gZG1fcmZfZGVmIHsKCVJGX1NhdmUgPTAsCglSRl9Ob3JtYWwgPSAxLAoJUkZfTUFYID0gMiwKfTsKCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAzIEFudGVubmEgRGl2ZXJzaXR5ICovCi8qIDM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwplbnVtIGRtX3N3YXMgewoJQW50ZW5uYV9BID0gMSwKCUFudGVubmFfQiA9IDIsCglBbnRlbm5hX01BWCA9IDMsCn07CgovKiAgTWF4aW1hbCBudW1iZXIgb2YgYW50ZW5uYSBkZXRlY3Rpb24gbWVjaGFuaXNtIG5lZWRzIHRvIHBlcmZvcm0sIGFkZGVkIGJ5IFJvZ2VyLCAyMDExLjEyLjI4LiAqLwojZGVmaW5lCU1BWF9BTlRFTk5BX0RFVEVDVElPTl9DTlQJMTAKCi8qICAqLwovKiAgRXh0ZXJuIEdsb2JhbCBWYXJpYWJsZXMuICovCi8qICAqLwojZGVmaW5lCU9GRE1fVEFCTEVfU0laRV85MkMJMzcKI2RlZmluZQlPRkRNX1RBQkxFX1NJWkVfOTJECTQzCiNkZWZpbmUJQ0NLX1RBQkxFX1NJWkUJCTMzCgpleHRlcm4JdTMyIE9GRE1Td2luZ1RhYmxlMjNBW09GRE1fVEFCTEVfU0laRV85MkRdOwpleHRlcm4JdTggQ0NLU3dpbmdUYWJsZV9DaDFfQ2gxMzIzQVtDQ0tfVEFCTEVfU0laRV1bOF07CmV4dGVybgl1OCBDQ0tTd2luZ1RhYmxlX0NoMTQyM0EgW0NDS19UQUJMRV9TSVpFXVs4XTsKCgoKLyogICovCi8qICBjaGVjayBTdGEgcG9pbnRlciB2YWxpZCBvciBub3QgKi8KLyogICovCiNkZWZpbmUgSVNfU1RBX1ZBTElEKHBTdGEpCQkocFN0YSkKLyogIDIwMTAwNTE0IEpvc2VwaDogQWRkIGRlZmluaXRpb24gZm9yIGFudGVubmEgc3dpdGNoaW5nIHRlc3QgYWZ0ZXIgbGluay4gKi8KLyogIFRoaXMgaW5kaWNhdGVzIHR3byBkaWZmZXJlbnQgdGhlIHN0ZXBzLiAqLwovKiAgSW4gU1dBV19TVEVQX1BFQUssIGRyaXZlciBuZWVkcyB0byBzd2l0Y2ggYW50ZW5uYSBhbmQgbGlzdGVuIHRvIHRoZSBzaWduYWwgb24gdGhlIGFpci4gKi8KLyogIEluIFNXQVdfU1RFUF9ERVRFUk1JTkUsIGRyaXZlciBqdXN0IGNvbXBhcmVzIHRoZSBzaWduYWwgY2FwdHVyZWQgaW4gU1dBV19TVEVQX1BFQUsgKi8KLyogIHdpdGggb3JpZ2luYWwgUlNTSSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCBhbnRlbm5hLiAqLwojZGVmaW5lIFNXQVdfU1RFUF9QRUFLCQkwCiNkZWZpbmUgU1dBV19TVEVQX0RFVEVSTUlORQkxCgp2b2lkIE9ETV9Xcml0ZV9ESUcyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLAl1OAlDdXJyZW50SUdJKTsKdm9pZCBPRE1fV3JpdGVfQ0NLX0NDQV9UaHJlczIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHU4CUN1ckNDS19DQ0FUaHJlcyk7Cgp2b2lkIE9ETV9TZXRBbnRlbm5hKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTggQW50ZW5uYSk7CgoKI2RlZmluZSBkbV9SRl9TYXZpbmcJT0RNX1JGX1NhdmluZzIzYQp2b2lkIE9ETV9SRl9TYXZpbmcyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1OCBiRm9yY2VJbk5vcm1hbCk7CgojZGVmaW5lIFN3QW50RGl2UmVzdEFmdGVyTGluawlPRE1fU3dBbnREaXZSZXN0QWZ0ZXJMaW5rCnZvaWQgT0RNX1N3QW50RGl2UmVzdEFmdGVyTGluayhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwoKI2RlZmluZSBkbV9DaGVja1RYUG93ZXJUcmFja2luZwkJT0RNX1RYUG93ZXJUcmFja2luZ0NoZWNrMjNhCnZvaWQgT0RNX1RYUG93ZXJUcmFja2luZ0NoZWNrMjNhKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Cgpib29sIE9ETV9SQVN0YXRlQ2hlY2syM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCBzMzIgUlNTSSwgYm9vbCBiRm9yY2VVcGRhdGUsCgkJICAgICAgdTggKnBSQVRSU3RhdGUpOwoKCiNkZWZpbmUgZG1fU1dBV19SU1NJX0NoZWNrCU9ETV9Td0FudERpdkNoa1BlclBrdFJzc2kKdm9pZCBPRE1fU3dBbnREaXZDaGtQZXJQa3RSc3NpKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSwgdTggU3RhdGlvbklELAoJCQkgICAgICAgc3RydWN0IHBoeV9pbmZvICpwUGh5SW5mbyk7Cgp1MzIgQ29udmVydFRvX2RCMjNhKHUzMiBWYWx1ZSk7Cgp1MzIgR2V0UFNERGF0YShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHVuc2lnbmVkIGludCBwb2ludCwgdTggaW5pdGlhbF9nYWluX3BzZCk7Cgp2b2lkIG9kbV9ESUcyM2FieVJTU0lfTFBTKHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Cgp1MzIgT0RNX0dldF9SYXRlX0JpdG1hcDIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHUzMiBtYWNpZCwgdTMyIHJhX21hc2ssIHU4IHJzc2lfbGV2ZWwpOwoKCnZvaWQgT0RNMjNhX0RNSW5pdChzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwoKdm9pZCBPRE1fRE1XYXRjaGRvZzIzYShzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOyAvKiAgRm9yIGNvbW1vbiB1c2UgaW4gdGhlIGZ1dHVyZSAqLwoKdm9pZCBPRE1fQ21uSW5mb0luaXQyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCBlbnVtIG9kbV9jbW5pbmZvCUNtbkluZm8sIHUzMiBWYWx1ZSk7Cgp2b2lkIE9ETTIzYV9DbW5JbmZvSG9vayhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIGVudW0gb2RtX2NtbmluZm8JQ21uSW5mbywgdm9pZCAqcFZhbHVlKTsKCnZvaWQgT0RNX0NtbkluZm9QdHJBcnJheUhvb2syM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCBlbnVtIG9kbV9jbW5pbmZvCUNtbkluZm8sIHUxNiBJbmRleCwgdm9pZCAqcFZhbHVlKTsKCnZvaWQgT0RNX0NtbkluZm9VcGRhdGUyM2Eoc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1MzIgQ21uSW5mbywgdTY0IFZhbHVlKTsKCnZvaWQgT0RNX1Jlc2V0SVFLUmVzdWx0KHN0cnVjdCBkbV9vZG1fdCAqcERNX09kbSk7Cgp2b2lkIE9ETV9BbnRzZWxTdGF0aXN0aWNzXzg4QyhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0sIHU4IE1hY0lkLCB1MzIgUFdEQkFsbCwgYm9vbCBpc0NDS3JhdGUpOwoKdm9pZCBPRE1fU2luZ2xlRHVhbEFudGVubmFEZWZhdWx0U2V0dGluZyhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwoKYm9vbCBPRE1fU2luZ2xlRHVhbEFudGVubmFEZXRlY3Rpb24oc3RydWN0IGRtX29kbV90ICpwRE1fT2RtLCB1OCBtb2RlKTsKCnZvaWQgb2RtX2R0YyhzdHJ1Y3QgZG1fb2RtX3QgKnBETV9PZG0pOwoKI2VuZGlmCg==