ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCA1MGU0ZjVkLi5hN2MyODZhIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDYgKzIsMjcgQEAKIENoYW5nZXMgc2luY2UgVS1Cb290IDAuMy4xOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisqIFBhdGNoZXMgYnkgVWRpIEZpbmtlbHN0ZWluLCAyIEp1bmUgMjAwMzoKKyAgLSBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20ga2V5Ym9hcmRzLCBpbml0aWFsaXplZCBieSBkZWZpbmluZyBhCisgICAgYm9hcmQtc3BlY2lmaWMgZHJ2X2tleWJvYXJkX2luaXQgYXMgd2VsbCBhcyBkZWZpbmluZyBDT05GSUdfS0VZQk9BUkQgLgorICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBSQkM4MjMgYm9hcmQuCisgIC0gY3B1L21wYzh4eC9sY2QuYyBub3cgYXV0b21hdGljYWxseSBjYWxjdWxhdGVzIHRoZQorICAgIEhvcml6b250YWwgUGl4ZWwgQ291bnQgZmllbGQuCisKKyogRml4IGFsaWdubWVudCBwcm9ibGVtIGluIEJPT1RQIChkaGNwX2xlYXNldGltZSBvcHRpb24pCisgIFtwb2ludGVkIG91dCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5p6HJlLCAyIEp1biAyMDAzXQorCisqIFBhdGNoIGJ5IE1hcmsgUmFrZXMsIDE0IE1heSAyMDAzOgorICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgZTEwMDAgZ2lnIGNhcmRzLgorCisqIFBhdGNoIGJ5IE55ZSBMaXUsIDMgSnVuIDIwMDM6CisgIGZpeCBjcml0aWNhbCB0eXBvIGluIE1BTVIgZGVmaW5pdGlvbiAoaW5jbHVkZS9tcGM4eHguaCkKKworKiBGaXggcmVxdWlyZW1lbnQgdG8gYWxpZ24gVS1Cb290IGltYWdlIG9uIDE2IGtCIGJvdW5kYXJpZXMgb24gUFBDLgorCisqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDIgSnVuIDIwMDMKKyAgTWlub3IgY2hhbmdlcyBmb3IgS1VQNEsgY29uZmlndXJhdGlvbgorCiAqIFBhdGNoIGJ5IE1hcmMgU2luZ2VyLCAyOSBNYXkgMjAwMzoKICAgRml4ZWQgcmFycCBib290IG1ldGhvZCBmb3IgSUEzMiBhbmQgb3RoZXIgbGl0dGxlLWVuZGlhbiBDUFVzLgogCmRpZmYgLS1naXQgYS9NQUtFQUxMIGIvTUFLRUFMTAppbmRleCA2YzFkYTFjLi40NTA2MjIzIDEwMDY0NAotLS0gYS9NQUtFQUxMCisrKyBiL01BS0VBTEwKQEAgLTMyLDExICszMiwxMSBAQAogCUlWTVM4CQlJVk1TOF8xMjgJSVZNUzhfMjU2CUtVUDRLICAgICAgICAgICBcCiAJTEFOVEVDCSAgICAgICAgbHdtb24gICAJTUJYCQlNQlg4NjBUCQlcCiAJTUhQQwkJTVZTMQkJTkVUVklBCQlOWDgyMwkJXAotCXBjdV9lCQlSMzYwTVBJCQlSUFhDbGFzc2ljCVJQWGxpdGUJCVwKLQlSUnZpc2lvbglTTTg1MAkJU1BEODIzVFMJc3ZtX3NjOHh4CVwKLQlTWE5JODU1VAlUT1A4NjAJCVRRTTgyM0wJCVRRTTgyM0xfTENECVwKLQlUUU04NTBMCQlUUU04NTVMCQlUUU04NjBMCQlUVFRlY2gJCVwKLQl2MzcJCQkJCQkJCVwKKwlwY3VfZQkJUjM2ME1QSQkJUkJDODIzCQlSUFhDbGFzc2ljCVwKKwlSUFhsaXRlCQlSUnZpc2lvbglTTTg1MAkJU1BEODIzVFMJXAorCXN2bV9zYzh4eAlTWE5JODU1VAlUT1A4NjAJCVRRTTgyM0wJCVwKKwlUUU04MjNMX0xDRAlUUU04NTBMCQlUUU04NTVMCQlUUU04NjBMCQlcCisJVFRUZWNoCQl2MzcJCQkJCQlcCiAiCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMDQyYzE1My4uN2M2NmE2MyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTMxNCw2ICszMTQsOSBAQAogUjM2ME1QSV9jb25maWc6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBwcGMgbXBjOHh4IHIzNjBtcGkKIAorUkJDODIzX2NvbmZpZzoJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4eHggcmJjODIzCisKIFJQWENsYXNzaWNfY29uZmlnOgl1bmNvbmZpZwogCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgcHBjIG1wYzh4eCBSUFhDbGFzc2ljCiAKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCAwNmZhZGU2Li5jZTI3ZmYxIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0zNDQsNyArMzQ0LDcgQEAKIAkJQ09ORklHX0lBRDIxMCwgICAgIENPTkZJR19SUFhsaXRlLCAgICBDT05GSUdfc2JjODI2MCwKIAkJQ09ORklHX0VCT05ZLCAgICAgIENPTkZJR19zYWNzbmcsICAgICBDT05GSUdfRlBTODYwTCwKIAkJQ09ORklHX1YzNywgICAgICAgIENPTkZJR19FTFBUODYwLCAgICBDT05GSUdfQ01JLAotCQlDT05GSUdfTkVUVklBCisJCUNPTkZJR19ORVRWSUEsICAgICBDT05GSUdfUkJDODIzCiAKIAkJQVJNIGJhc2VkIGJvYXJkczoKIAkJLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY4OCw2ICs2ODgsOSBAQAogCQlDRkdfU0NTSV9TWU01M0M4WFhfQ0NGIHRvIGZpeCBjbG9jayB0aW1pbmcgKDgwTWh6KQogCiAtIE5FVFdPUksgU3VwcG9ydCAoUENJKToKKwkJQ09ORklHX0UxMDAwCisJCVN1cHBvcnQgZm9yIEludGVsIDgyNTR4IGdpZ2FiaXQgY2hpcHMuCisJCQogCQlDT05GSUdfRUVQUk8xMDAKIAkJU3VwcG9ydCBmb3IgSW50ZWwgODI1NTcvODI1NTkvODI1NTlFUiBjaGlwcy4KIAkJT3B0aW9uYWwgQ09ORklHX0VFUFJPMTAwX1NST01fV1JJVEUgZW5hYmxlcyBlZXByb20KQEAgLTc2Niw2ICs3NjksMTMgQEAKIAkJYW5kIDE2YnBwIG1vZGVzIGRlZmluZWQgYnkgQ09ORklHX1ZJREVPX1NFRDEzODA2XzhCUFAKIAkJb3IgQ09ORklHX1ZJREVPX1NFRDEzODA2XzE2QlBQCiAKKy0gS2V5Ym9hcmQgU3VwcG9ydDoKKyAgICAgICAgICAgICAgICBDT05GSUdfS0VZQk9BUkQKKworICAgICAgICAgICAgICAgIERlZmluZSB0aGlzIHRvIGVuYWJsZSBhIGN1c3RvbSBrZXlib2FyZCBzdXBwb3J0LgorICAgICAgICAgICAgICAgIFRoaXMgc2ltcGx5IGNhbGxzIGRydl9rZXlib2FyZF9pbml0KCkgd2hpY2ggbXVzdCBiZQorICAgICAgICAgICAgICAgIGRlZmluZWQgaW4geW91ciBib2FyZC1zcGVjaWZpYyBmaWxlcy4KKyAgICAgICAgICAgICAgICBUaGUgb25seSBib2FyZCB1c2luZyB0aGlzIHNvIGZhciBpcyBSQkM4MjMuCiAKIC0gTENEIFN1cHBvcnQ6CUNPTkZJR19MQ0QKIApkaWZmIC0tZ2l0IGEvYm9hcmQva3VwNGsvZmxhc2guYyBiL2JvYXJkL2t1cDRrL2ZsYXNoLmMKaW5kZXggNzI5N2MxNS4uNjE5Y2NiOSAxMDA2NDQKLS0tIGEvYm9hcmQva3VwNGsvZmxhc2guYworKysgYi9ib2FyZC9rdXA0ay9mbGFzaC5jCkBAIC0xNzIsNiArMTcyLDkgQEAKIAl2YWx1ZSA9IHZhbHVlfCh2YWx1ZTw8MTYpOwogCiAJc3dpdGNoICh2YWx1ZSkgeworCWNhc2UgQU1EX01BTlVGQUNUOgorCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQ7CisJCWJyZWFrOwogCWNhc2UgRlVKX01BTlVGQUNUOgogCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9GVUo7CiAJCWJyZWFrOwpAQCAtMTkxLDYgKzE5NCwxNiBAQAogCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxOTsKIAkJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDA7CiAJCWJyZWFrOwkJCQkvKiA9PiAxIE1CCQkqLworCWNhc2UgQU1EX0lEX0xWODAwVDoKKwkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU04MDBUOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxOTsKKwkJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDA7CisJCWJyZWFrOwkJCQkvKiA9PiAyIE1CCQkqLworCWNhc2UgQU1EX0lEX0xWODAwQjoKKwkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU04MDBCOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSAxOTsKKwkJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDA7CisJCWJyZWFrOwkJCQkvKiA9PiAyIE1CCQkqLwogCWRlZmF1bHQ6CiAJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKIAkJcmV0dXJuICgwKTsJCQkvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCmRpZmYgLS1naXQgYS9ib2FyZC9rdXA0ay9rdXA0ay5jIGIvYm9hcmQva3VwNGsva3VwNGsuYwppbmRleCBhZWFmYTZhLi5iM2VkZTE3IDEwMDY0NAotLS0gYS9ib2FyZC9rdXA0ay9rdXA0ay5jCisrKyBiL2JvYXJkL2t1cDRrL2t1cDRrLmMKQEAgLTU0LDEwICs1NCw3IEBACiAJLyoKIAkgKiBTaW5nbGUgUmVhZC4gKE9mZnNldCAwIGluIFVQTUEgUkFNKQogCSAqLwotCTB4MUYwN0ZDMDQsCi0JMHhFRUFFRkMwNCwKLQkweDExQURGQzA0LAotCTB4RUZCQkJDMDAsCisJMHgxRjA3RkMwNCwgMHhFRUFFRkMwNCwgMHgxMUFERkMwNCwgMHhFRkJCQkMwMCwKIAkweDFGRjc3QzQ3LCAvKiBsYXN0ICovCiAKIAkvKgpAQCAtNjgsNTcgKzY1LDM3IEBACiAJICogc2VxdWVuY2UsIHdoaWNoIGlzIGV4ZWN1dGVkIGJ5IGEgUlVOIGNvbW1hbmQuCiAJICoKIAkgKi8KLQkweDFGRjc3QzM1LAotCTB4RUZFQUJDMzQsCi0JMHgxRkI1N0MzNSwgIC8qIGxhc3QgKi8KKwkJICAgIDB4MUZGNzdDMzUsIDB4RUZFQUJDMzQsIDB4MUZCNTdDMzUsIC8qIGxhc3QgKi8KIAogCS8qCiAJICogQnVyc3QgUmVhZC4gKE9mZnNldCA4IGluIFVQTUEgUkFNKQogCSAqLwotCTB4MUYwN0ZDMDQsCi0JMHhFRUFFRkMwNCwKLQkweDEwQURGQzA0LAotCTB4RjBBRkZDMDAsCi0JMHhGMEFGRkMwMCwKLQkweEYxQUZGQzAwLAotCTB4RUZCQkJDMDAsCi0JMHgxRkY3N0M0NywgLyogbGFzdCAqLworCTB4MUYwN0ZDMDQsIDB4RUVBRUZDMDQsIDB4MTBBREZDMDQsIDB4RjBBRkZDMDAsCisJMHhGMEFGRkMwMCwgMHhGMUFGRkMwMCwgMHhFRkJCQkMwMCwgMHgxRkY3N0M0NywgLyogbGFzdCAqLwogCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCiAJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKIAogCS8qCiAJICogU2luZ2xlIFdyaXRlLiAoT2Zmc2V0IDE4IGluIFVQTUEgUkFNKQogCSAqLwotCTB4MUYyN0ZDMDQsCi0JMHhFRUFFQkMwMCwKLQkweDAxQjkzQzA0LAotICAgIDB4MUZGNzdDNDcsIC8qIGxhc3QgKi8KKwkweDFGMjdGQzA0LCAweEVFQUVCQzAwLCAweDAxQjkzQzA0LCAweDFGRjc3QzQ3LCAvKiBsYXN0ICovCiAJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKIAogCS8qCiAJICogQnVyc3QgV3JpdGUuIChPZmZzZXQgMjAgaW4gVVBNQSBSQU0pCiAJICovCi0JMHgxRjA3RkMwNCwKLQkweEVFQUVCQzAwLAotCTB4MTBBRDdDMDAsCi0JMHhGMEFGRkMwMCwKLQkweEYwQUZGQzAwLAotCTB4RTFCQkJDMDQsCi0JMHgxRkY3N0M0NywgLyogbGFzdCAqLwotICAgIF9OT1RfVVNFRF8sCisJMHgxRjA3RkMwNCwgMHhFRUFFQkMwMCwgMHgxMEFEN0MwMCwgMHhGMEFGRkMwMCwKKwkweEYwQUZGQzAwLCAweEUxQkJCQzA0LCAweDFGRjc3QzQ3LCAvKiBsYXN0ICovCisJCQkJCSAgICBfTk9UX1VTRURfLAogCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCiAJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKIAogCS8qCiAJICogUmVmcmVzaCAgKE9mZnNldCAzMCBpbiBVUE1BIFJBTSkKIAkgKi8KLQkweDFGRjVGQzg0LAotCTB4RkZGRkZDMDQsCi0JMHhGRkZGRkMwNCwKLQkweEZGRkZGQzA0LAotCTB4RkZGRkZDODQsCi0JMHhGRkZGRkMwNywgLyogbGFzdCAqLwotCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCisJMHgxRkY1RkM4NCwgMHhGRkZGRkMwNCwgMHhGRkZGRkMwNCwgMHhGRkZGRkMwNCwKKwkweEZGRkZGQzg0LCAweEZGRkZGQzA3LCAvKiBsYXN0ICovCisJCQkJX05PVF9VU0VEXywgX05PVF9VU0VEXywKIAlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAogCiAJLyoKQEAgLTE0Niw4OSArMTIzLDk2IEBACiAKIGxvbmcgaW50IGluaXRkcmFtIChpbnQgYm9hcmRfdHlwZSkKIHsKLSAgICB2b2xhdGlsZSBpbW1hcF90ICAgICAqaW1tYXAgID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLSAgICB2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7Ci0gICAgbG9uZyBpbnQgc2l6ZV9iMCA9IDA7Ci0gICAgbG9uZyBpbnQgc2l6ZV9iMSA9IDA7Ci0gICAgbG9uZyBpbnQgc2l6ZV9iMiA9IDA7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKKwl2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7CisJbG9uZyBpbnQgc2l6ZV9iMCA9IDA7CisJbG9uZyBpbnQgc2l6ZV9iMSA9IDA7CisJbG9uZyBpbnQgc2l6ZV9iMiA9IDA7CiAKLSAgICB1cG1jb25maWcoVVBNQSwgKHVpbnQgKilzZHJhbV90YWJsZSwgc2l6ZW9mKHNkcmFtX3RhYmxlKS9zaXplb2YodWludCkpOworCXVwbWNvbmZpZyAoVVBNQSwgKHVpbnQgKikgc2RyYW1fdGFibGUsCisJCQkgc2l6ZW9mIChzZHJhbV90YWJsZSkgLyBzaXplb2YgKHVpbnQpKTsKKworCS8qCisJICogUHJlbGltaW5hcnkgcHJlc2NhbGVyIGZvciByZWZyZXNoIChkZXBlbmRzIG9uIG51bWJlciBvZgorCSAqIGJhbmtzKTogVGhpcyB2YWx1ZSBpcyBzZWxlY3RlZCBmb3IgZm91ciBjeWNsZXMgZXZlcnkgNjIuNCB1cworCSAqIHdpdGggdHdvIFNEUkFNIGJhbmtzIG9yIGZvdXIgY3ljbGVzIGV2ZXJ5IDMxLjIgdXMgd2l0aCBvbmUKKwkgKiBiYW5rLiBJdCB3aWxsIGJlIGFkanVzdGVkIGFmdGVyIG1lbW9yeSBzaXppbmcuCisJICovCisJbWVtY3RsLT5tZW1jX21wdHByID0gQ0ZHX01QVFBSOwogCi0gICAgLyoKLSAgICAgKiBQcmVsaW1pbmFyeSBwcmVzY2FsZXIgZm9yIHJlZnJlc2ggKGRlcGVuZHMgb24gbnVtYmVyIG9mCi0gICAgICogYmFua3MpOiBUaGlzIHZhbHVlIGlzIHNlbGVjdGVkIGZvciBmb3VyIGN5Y2xlcyBldmVyeSA2Mi40IHVzCi0gICAgICogd2l0aCB0d28gU0RSQU0gYmFua3Mgb3IgZm91ciBjeWNsZXMgZXZlcnkgMzEuMiB1cyB3aXRoIG9uZQotICAgICAqIGJhbmsuIEl0IHdpbGwgYmUgYWRqdXN0ZWQgYWZ0ZXIgbWVtb3J5IHNpemluZy4KLSAgICAgKi8KLSAgICBtZW1jdGwtPm1lbWNfbXB0cHIgPSBDRkdfTVBUUFI7CisJbWVtY3RsLT5tZW1jX21hciA9IDB4MDAwMDAwODg7CiAKLSAgICBtZW1jdGwtPm1lbWNfbWFyICA9IDB4MDAwMDAwODg7CisJLyoKKwkgKiBNYXAgY29udHJvbGxlciBiYW5rcyAxIGFuZCAyIHRvIHRoZSBTRFJBTSBiYW5rcyAyIGFuZCAzIGF0CisJICogcHJlbGltaW5hcnkgYWRkcmVzc2VzIC0gdGhlc2UgaGF2ZSB0byBiZSBtb2RpZmllZCBhZnRlciB0aGUKKwkgKiBTRFJBTSBzaXplIGhhcyBiZWVuIGRldGVybWluZWQuCisJICovCisvKgltZW1jdGwtPm1lbWNfb3IxID0gQ0ZHX09SMV9QUkVMSU07CSovCisvKgltZW1jdGwtPm1lbWNfYnIxID0gQ0ZHX0JSMV9QUkVMSU07CSovCiAKLSAgICAvKgotICAgICAqIE1hcCBjb250cm9sbGVyIGJhbmtzIDEgYW5kIDIgdG8gdGhlIFNEUkFNIGJhbmtzIDIgYW5kIDMgYXQKLSAgICAgKiBwcmVsaW1pbmFyeSBhZGRyZXNzZXMgLSB0aGVzZSBoYXZlIHRvIGJlIG1vZGlmaWVkIGFmdGVyIHRoZQotICAgICAqIFNEUkFNIHNpemUgaGFzIGJlZW4gZGV0ZXJtaW5lZC4KLSAgICAgKi8KLS8qICAgIG1lbWN0bC0+bWVtY19vcjEgPSBDRkdfT1IxX1BSRUxJTTsJKi8KLS8qICAgIG1lbWN0bC0+bWVtY19icjEgPSBDRkdfQlIxX1BSRUxJTTsJKi8KLSAKIC8qCW1lbWN0bC0+bWVtY19vcjIgPSBDRkdfT1IyX1BSRUxJTTsJKi8KIC8qCW1lbWN0bC0+bWVtY19icjIgPSBDRkdfQlIyX1BSRUxJTTsJKi8KIAogCi0gICAgbWVtY3RsLT5tZW1jX21hbXIgPSBDRkdfTUFNUiAmICh+KE1BTVJfUFRBRSkpOyAvKiBubyByZWZyZXNoIHlldCAqLworCW1lbWN0bC0+bWVtY19tYW1yID0gQ0ZHX01BTVIgJiAofihNQU1SX1BUQUUpKTsJLyogbm8gcmVmcmVzaCB5ZXQgKi8KIAotICAgIHVkZWxheSgyMDApOworCXVkZWxheSAoMjAwKTsKIAotICAgIC8qIHBlcmZvcm0gU0RSQU0gaW5pdGlhbGl6c2F0aW9uIHNlcXVlbmNlICovCisJLyogcGVyZm9ybSBTRFJBTSBpbml0aWFsaXpzYXRpb24gc2VxdWVuY2UgKi8KIAotICAgIG1lbWN0bC0+bWVtY19tY3IgID0gMHg4MDAwMjEwNTsJLyogU0RSQU0gYmFuayAwICovCi0gICAgdWRlbGF5KDEpOwotICAgIG1lbWN0bC0+bWVtY19tY3IgID0gMHg4MDAwMjgzMDsJLyogU0RSQU0gYmFuayAwIC0gZXhlY3V0ZSB0d2ljZSAqLwotICAgIHVkZWxheSgxKTsKLSAgICBtZW1jdGwtPm1lbWNfbWNyICA9IDB4ODAwMDIxMDY7CS8qIFNEUkFNIGJhbmsgMCAtIFJVTiBNUlMgUGF0dGVybiBmcm9tIGxvYyA2ICovCi0gICAgdWRlbGF5KDEpOworCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwMDAyMTA1OwkvKiBTRFJBTSBiYW5rIDAgKi8KKwl1ZGVsYXkgKDEpOworCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwMDAyODMwOwkvKiBTRFJBTSBiYW5rIDAgLSBleGVjdXRlIHR3aWNlICovCisJdWRlbGF5ICgxKTsKKwltZW1jdGwtPm1lbWNfbWNyID0gMHg4MDAwMjEwNjsJLyogU0RSQU0gYmFuayAwIC0gUlVOIE1SUyBQYXR0ZXJuIGZyb20gbG9jIDYgKi8KKwl1ZGVsYXkgKDEpOwogCi0JbWVtY3RsLT5tZW1jX21jciAgPSAweDgwMDA0MTA1OwkvKiBTRFJBTSBiYW5rIDEgKi8KLQl1ZGVsYXkoMSk7Ci0JbWVtY3RsLT5tZW1jX21jciAgPSAweDgwMDA0ODMwOwkvKiBTRFJBTSBiYW5rIDEgLSBleGVjdXRlIHR3aWNlICovCi0JdWRlbGF5KDEpOwotICAgIG1lbWN0bC0+bWVtY19tY3IgID0gMHg4MDAwNDEwNjsJLyogU0RSQU0gYmFuayAxIC0gUlVOIE1SUyBQYXR0ZXJuIGZyb20gbG9jIDYgKi8KLSAgICB1ZGVsYXkoMSk7CisJbWVtY3RsLT5tZW1jX21jciA9IDB4ODAwMDQxMDU7CS8qIFNEUkFNIGJhbmsgMSAqLworCXVkZWxheSAoMSk7CisJbWVtY3RsLT5tZW1jX21jciA9IDB4ODAwMDQ4MzA7CS8qIFNEUkFNIGJhbmsgMSAtIGV4ZWN1dGUgdHdpY2UgKi8KKwl1ZGVsYXkgKDEpOworCW1lbWN0bC0+bWVtY19tY3IgPSAweDgwMDA0MTA2OwkvKiBTRFJBTSBiYW5rIDEgLSBSVU4gTVJTIFBhdHRlcm4gZnJvbSBsb2MgNiAqLworCXVkZWxheSAoMSk7CiAKLQltZW1jdGwtPm1lbWNfbWNyICA9IDB4ODAwMDYxMDU7CS8qIFNEUkFNIGJhbmsgMiAqLwotCXVkZWxheSgxKTsKLQltZW1jdGwtPm1lbWNfbWNyICA9IDB4ODAwMDY4MzA7CS8qIFNEUkFNIGJhbmsgMiAtIGV4ZWN1dGUgdHdpY2UgKi8KLQl1ZGVsYXkoMSk7Ci0gICAgbWVtY3RsLT5tZW1jX21jciAgPSAweDgwMDA2MTA2OwkvKiBTRFJBTSBiYW5rIDIgLSBSVU4gTVJTIFBhdHRlcm4gZnJvbSBsb2MgNiAqLwotICAgIHVkZWxheSgxKTsKKwltZW1jdGwtPm1lbWNfbWNyID0gMHg4MDAwNjEwNTsJLyogU0RSQU0gYmFuayAyICovCisJdWRlbGF5ICgxKTsKKwltZW1jdGwtPm1lbWNfbWNyID0gMHg4MDAwNjgzMDsJLyogU0RSQU0gYmFuayAyIC0gZXhlY3V0ZSB0d2ljZSAqLworCXVkZWxheSAoMSk7CisJbWVtY3RsLT5tZW1jX21jciA9IDB4ODAwMDYxMDY7CS8qIFNEUkFNIGJhbmsgMiAtIFJVTiBNUlMgUGF0dGVybiBmcm9tIGxvYyA2ICovCisJdWRlbGF5ICgxKTsKIAorCW1lbWN0bC0+bWVtY19tYW1yIHw9IE1BTVJfUFRBRTsJLyogZW5hYmxlIHJlZnJlc2ggKi8KKwl1ZGVsYXkgKDEwMDApOwogCi0gICAgbWVtY3RsLT5tZW1jX21hbXIgfD0gTUFNUl9QVEFFOwkvKiBlbmFibGUgcmVmcmVzaCAqLwotCi0gICAgdWRlbGF5ICgxMDAwKTsKLQotICAgIHNpemVfYjAgPSAweDAwODAwMDAwOwotICAgIHNpemVfYjEgPSAweDAwODAwMDAwOwotICAgIHNpemVfYjIgPSAweDAwODAwMDAwOwotCi0KKyNpZiAwCQkJCQkJCS8qIDMgeCA4TUIgKi8KKwlzaXplX2IwID0gMHgwMDgwMDAwMDsKKwlzaXplX2IxID0gMHgwMDgwMDAwMDsKKwlzaXplX2IyID0gMHgwMDgwMDAwMDsKIAltZW1jdGwtPm1lbWNfbXB0cHIgPSBDRkdfTVBUUFI7Ci0JdWRlbGF5KDEwMDApOwotCisJdWRlbGF5ICgxMDAwKTsKIAltZW1jdGwtPm1lbWNfb3IxID0gMHhGRjgwMEEwMDsKIAltZW1jdGwtPm1lbWNfYnIxID0gMHgwMDAwMDA4MTsKLQotICAgIG1lbWN0bC0+bWVtY19vcjIgPSAweEZGMDAwQTAwOwotICAgIG1lbWN0bC0+bWVtY19icjIgPSAweDAwODAwMDgxOwotCisJbWVtY3RsLT5tZW1jX29yMiA9IDB4RkYwMDBBMDA7CisJbWVtY3RsLT5tZW1jX2JyMiA9IDB4MDA4MDAwODE7CiAJbWVtY3RsLT5tZW1jX29yMyA9IDB4RkUwMDBBMDA7CiAJbWVtY3RsLT5tZW1jX2JyMyA9IDB4MDEwMDAwODE7Ci0KLSAgICB1ZGVsYXkoMTAwMDApOworI2Vsc2UJCQkJCQkJLyogMyB4IDE2IE1CICovCisJc2l6ZV9iMCA9IDB4MDEwMDAwMDA7CisJc2l6ZV9iMSA9IDB4MDEwMDAwMDA7CisJc2l6ZV9iMiA9IDB4MDEwMDAwMDA7CisJbWVtY3RsLT5tZW1jX21wdHByID0gQ0ZHX01QVFBSOworCXVkZWxheSAoMTAwMCk7CisJbWVtY3RsLT5tZW1jX29yMSA9IDB4RkYwMDBBMDA7CisJbWVtY3RsLT5tZW1jX2JyMSA9IDB4MDAwMDAwODE7CisJbWVtY3RsLT5tZW1jX29yMiA9IDB4RkUwMDBBMDA7CisJbWVtY3RsLT5tZW1jX2JyMiA9IDB4MDEwMDAwODE7CisJbWVtY3RsLT5tZW1jX29yMyA9IDB4RkMwMDBBMDA7CisJbWVtY3RsLT5tZW1jX2JyMyA9IDB4MDIwMDAwODE7CisjZW5kaWYKIAorCXVkZWxheSAoMTAwMDApOwogCi0gICAgcmV0dXJuIChzaXplX2IwICsgc2l6ZV9iMSArIHNpemVfYjIpOworCXJldHVybiAoc2l6ZV9iMCArIHNpemVfYjEgKyBzaXplX2IyKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjQxLDQ2ICsyMjUsNDcgQEAKICAqIC0gc2hvcnQgYmV0d2VlbiBkYXRhIGxpbmVzCiAgKi8KICNpZiAwCi1zdGF0aWMgbG9uZyBpbnQgZHJhbV9zaXplIChsb25nIGludCBtYW1yX3ZhbHVlLCBsb25nIGludCAqYmFzZSwgbG9uZyBpbnQgbWF4c2l6ZSkKK3N0YXRpYyBsb25nIGludCBkcmFtX3NpemUgKGxvbmcgaW50IG1hbXJfdmFsdWUsIGxvbmcgaW50ICpiYXNlLAorCQkJCQkJICAgbG9uZyBpbnQgbWF4c2l6ZSkKIHsKLSAgICB2b2xhdGlsZSBpbW1hcF90ICAgICAqaW1tYXAgID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLSAgICB2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7Ci0gICAgdm9sYXRpbGUgbG9uZyBpbnQJICphZGRyOwotICAgIHVsb25nCQkgIGNudCwgdmFsOwotICAgIHVsb25nCQkgIHNhdmVbMzJdOwkvKiB0byBtYWtlIHRlc3Qgbm9uLWRlc3RydWN0aXZlICovCi0gICAgdW5zaWduZWQgY2hhcgkgIGkgPSAwOworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CisJdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOworCXZvbGF0aWxlIGxvbmcgaW50ICphZGRyOworCXVsb25nIGNudCwgdmFsOworCXVsb25nIHNhdmVbMzJdOwkJCQkvKiB0byBtYWtlIHRlc3Qgbm9uLWRlc3RydWN0aXZlICovCisJdW5zaWduZWQgY2hhciBpID0gMDsKIAotICAgIG1lbWN0bC0+bWVtY19tYW1yID0gbWFtcl92YWx1ZTsKKwltZW1jdGwtPm1lbWNfbWFtciA9IG1hbXJfdmFsdWU7CiAKLSAgICBmb3IgKGNudCA9IG1heHNpemUvc2l6ZW9mKGxvbmcpOyBjbnQgPiAwOyBjbnQgPj49IDEpIHsKLQlhZGRyID0gYmFzZSArIGNudDsJLyogcG9pbnRlciBhcml0aCEgKi8KKwlmb3IgKGNudCA9IG1heHNpemUgLyBzaXplb2YgKGxvbmcpOyBjbnQgPiAwOyBjbnQgPj49IDEpIHsKKwkJYWRkciA9IGJhc2UgKyBjbnQ7CQkvKiBwb2ludGVyIGFyaXRoISAqLwogCi0Jc2F2ZVtpKytdID0gKmFkZHI7Ci0JKmFkZHIgPSB+Y250OwotICAgIH0KKwkJc2F2ZVtpKytdID0gKmFkZHI7CisJCSphZGRyID0gfmNudDsKKwl9CiAKLSAgICAvKiB3cml0ZSAwIHRvIGJhc2UgYWRkcmVzcyAqLwotICAgIGFkZHIgPSBiYXNlOwotICAgIHNhdmVbaV0gPSAqYWRkcjsKLSAgICAqYWRkciA9IDA7CisJLyogd3JpdGUgMCB0byBiYXNlIGFkZHJlc3MgKi8KKwlhZGRyID0gYmFzZTsKKwlzYXZlW2ldID0gKmFkZHI7CisJKmFkZHIgPSAwOwogCi0gICAgLyogY2hlY2sgYXQgYmFzZSBhZGRyZXNzICovCi0gICAgaWYgKCh2YWwgPSAqYWRkcikgIT0gMCkgewotCSphZGRyID0gc2F2ZVtpXTsKLQlyZXR1cm4gKDApOwotICAgIH0KKwkvKiBjaGVjayBhdCBiYXNlIGFkZHJlc3MgKi8KKwlpZiAoKHZhbCA9ICphZGRyKSAhPSAwKSB7CisJCSphZGRyID0gc2F2ZVtpXTsKKwkJcmV0dXJuICgwKTsKKwl9CiAKLSAgICBmb3IgKGNudCA9IDE7IGNudCA8PSBtYXhzaXplL3NpemVvZihsb25nKTsgY250IDw8PSAxKSB7Ci0JYWRkciA9IGJhc2UgKyBjbnQ7CS8qIHBvaW50ZXIgYXJpdGghICovCisJZm9yIChjbnQgPSAxOyBjbnQgPD0gbWF4c2l6ZSAvIHNpemVvZiAobG9uZyk7IGNudCA8PD0gMSkgeworCQlhZGRyID0gYmFzZSArIGNudDsJCS8qIHBvaW50ZXIgYXJpdGghICovCiAKLQl2YWwgPSAqYWRkcjsKLQkqYWRkciA9IHNhdmVbLS1pXTsKKwkJdmFsID0gKmFkZHI7CisJCSphZGRyID0gc2F2ZVstLWldOwogCi0JaWYgKHZhbCAhPSAofmNudCkpIHsKLQkgICAgcmV0dXJuIChjbnQgKiBzaXplb2YobG9uZykpOworCQlpZiAodmFsICE9ICh+Y250KSkgeworCQkJcmV0dXJuIChjbnQgKiBzaXplb2YgKGxvbmcpKTsKKwkJfQogCX0KLSAgICB9Ci0gICAgcmV0dXJuIChtYXhzaXplKTsKKwlyZXR1cm4gKG1heHNpemUpOwogfQogI2VuZGlmCiAKQEAgLTI4OSwxNTUgKzI3NCwxNzUgQEAKIAlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAogI2lmZGVmIENPTkZJR19TVEFUVVNfTEVECi0Jdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfS1VQNEtfTE9HTwogCWJkX3QgKmJkID0gZ2QtPmJkOwogCiAKLQlsY2RfbG9nbyhiZCk7Ci0jZW5kaWYgLyogQ09ORklHX0tVUDRLX0xPR08gKi8KKwlsY2RfbG9nbyAoYmQpOworI2VuZGlmCQkJCQkJCS8qIENPTkZJR19LVVA0S19MT0dPICovCiAjaWZkZWYgQ09ORklHX0lERV9MRUQKIAkvKiBDb25maWd1cmUgUEE4IGFzIG91dHB1dCBwb3J0ICovCiAJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkaXIgfD0gMHg4MDsKIAlpbW1hcC0+aW1faW9wb3J0LmlvcF9wYW9kciB8PSAweDgwOwogCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhcGFyICY9IH4weDgwOwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0IHw9IDB4ODA7IC8qIHR1cm4gaXQgb2ZmICovCisJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkYXQgfD0gMHg4MDsJLyogdHVybiBpdCBvZmYgKi8KICNlbmRpZgotCXJldHVybigwKTsKKwlyZXR1cm4gKDApOwogfQogCiAjaWZkZWYgQ09ORklHX0tVUDRLX0xPR08KLXZvaWQgbGNkX2xvZ28oYmRfdCAqYmQpeworCiAKLSAgICBGQl9JTkZPX1MxRDEzeHh4IGZiX2luZm87Ci0gICAgUzFEX0lOREVYIHMxZFJlZzsKLSAgICBTMURfVkFMVUUgczFkVmFsdWU7Ci0gICAgdm9sYXRpbGUgaW1tYXBfdCAgICAgKmltbXIgID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLSAgICB2b2xhdGlsZQltZW1jdGw4eHhfdCAgICAgKm1lbWN0bDsKKyNkZWZpbmUgUEJfTENEX1BXTQkoKHVpbnQpMHgwMDAwNDAwMCkJLyogUEIgMTcgKi8KKwordm9pZCBsY2RfbG9nbyAoYmRfdCAqIGJkKQoreworCisKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SOworCisKKworCUZCX0lORk9fUzFEMTN4eHggZmJfaW5mbzsKKwlTMURfSU5ERVggczFkUmVnOworCVMxRF9WQUxVRSBzMWRWYWx1ZTsKKwl2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CisJdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bDsKIAl1c2hvcnQgaTsKIAl1Y2hhciAqZmI7Ci0gICAgaW50IHJzLCBncywgYnM7Ci0gICAgaW50IHIgPSA4LCBnID0gOCwgYiA9IDQ7Ci0gICAgaW50IHIxLGcxLGIxOworCWludCBycywgZ3MsIGJzOworCWludCByID0gOCwgZyA9IDgsIGIgPSA0OworCWludCByMSwgZzEsIGIxOworCisJaW1tci0+aW1fY3BtLmNwX3BicGFyICY9IH5QQl9MQ0RfUFdNOworCWltbXItPmltX2NwbS5jcF9wYm9kciAmPSB+UEJfTENEX1BXTTsKKwlpbW1yLT5pbV9jcG0uY3BfcGJkYXQgJj0gflBCX0xDRF9QV007CS8qIHNldCB0byAwID0gZW5hYmxlZCAqLworCWltbXItPmltX2NwbS5jcF9wYmRpciB8PSBQQl9MQ0RfUFdNOworCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qKi8KKwkgLyoqLwogLyogSW5pdGlhbGl6ZSB0aGUgY2hpcCBhbmQgdGhlIGZyYW1lIGJ1ZmZlciBkcml2ZXIuICovCi0vKiovCisJCQkgLyoqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgIG1lbWN0bCA9ICZpbW1yLT5pbV9tZW1jdGw7CisJCQltZW1jdGwgPSAmaW1tci0+aW1fbWVtY3RsOwogLyogICAgbWVtY3RsLT5tZW1jX29yNSA9IDB4RkZDMDA3RjA7ICAgIC8gKiA0IE1CICAxNyBXUyBvciBleHRlcm5lbCBUQSAqLwogLyogICAgbWVtY3RsLT5tZW1jX2JyNSA9IDB4ODAwMDA4MDE7ICAgIC8gKiBTdGFydCBhdCAweDgwMDAwMDAwICovCiAKLSAgICBtZW1jdGwtPm1lbWNfb3I1ID0gMHhGRkMwMDcwODsgICAgLyogNCBNQiAgMTcgV1Mgb3IgZXh0ZXJuZWwgVEEgKi8KLSAgICBtZW1jdGwtPm1lbWNfYnI1ID0gMHg4MDA4MDgwMTsgICAgLyogU3RhcnQgYXQgMHg4MDA4MDAwMCAqLworCW1lbWN0bC0+bWVtY19vcjUgPSAweEZGQzAwNzA4OwkvKiA0IE1CICAxNyBXUyBvciBleHRlcm5lbCBUQSAqLworCW1lbWN0bC0+bWVtY19icjUgPSAweDgwMDgwODAxOwkvKiBTdGFydCBhdCAweDgwMDgwMDAwICovCiAKIAogCiAKIAotICAgIGZiX2luZm8uVm1lbUFkZHIgPSAodW5zaWduZWQgY2hhciopKFMxRF9QSFlTSUNBTF9WTUVNX0FERFIpOwotICAgIGZiX2luZm8uUmVnQWRkciA9ICAodW5zaWduZWQgY2hhciopKFMxRF9QSFlTSUNBTF9SRUdfQUREUik7CisJZmJfaW5mby5WbWVtQWRkciA9ICh1bnNpZ25lZCBjaGFyICopIChTMURfUEhZU0lDQUxfVk1FTV9BRERSKTsKKwlmYl9pbmZvLlJlZ0FkZHIgPSAodW5zaWduZWQgY2hhciAqKSAoUzFEX1BIWVNJQ0FMX1JFR19BRERSKTsKIAotICAgIGlmICgoKChTMURfVkFMVUUqKWZiX2luZm8uUmVnQWRkcilbMF0gIT0gMHgyOCkgfHwgKCgoUzFEX1ZBTFVFKilmYl9pbmZvLlJlZ0FkZHIpWzFdICE9IDB4MTQpKQotICAgIHsKLQkgIHByaW50ZigiV2FybmluZzpMQ0QgQ29udHJvbGxlciBTMUQxMzcwNiBub3QgZm91bmRcbiIpOwotCSAgcmV0dXJuOwotICAgIH0KKwlpZiAoKCgoUzFEX1ZBTFVFICopIGZiX2luZm8uUmVnQWRkcilbMF0gIT0gMHgyOCkKKwkJfHwgKCgoUzFEX1ZBTFVFICopIGZiX2luZm8uUmVnQWRkcilbMV0gIT0gMHgxNCkpIHsKKwkJcHJpbnRmICgiV2FybmluZzpMQ0QgQ29udHJvbGxlciBTMUQxMzcwNiBub3QgZm91bmRcbiIpOworCQlyZXR1cm47CisJfQogCi0gICAgLyogaW5pdCBjb250cm9sbGVyICovCi0gICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihhUzFEUmVncykvc2l6ZW9mKGFTMURSZWdzWzBdKTsgaSsrKQotICAgIHsKLSAgICAgICAgczFkUmVnID0gYVMxRFJlZ3NbaV0uSW5kZXg7Ci0gICAgICAgIHMxZFZhbHVlID0gYVMxRFJlZ3NbaV0uVmFsdWU7CisJLyogaW5pdCBjb250cm9sbGVyICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZiAoYVMxRFJlZ3MpIC8gc2l6ZW9mIChhUzFEUmVnc1swXSk7IGkrKykgeworCQlzMWRSZWcgPSBhUzFEUmVnc1tpXS5JbmRleDsKKwkJczFkVmFsdWUgPSBhUzFEUmVnc1tpXS5WYWx1ZTsKIC8qICAgICAgcHJpbnRmKCJzaWQxIEluZGV4OiAlMDJ4IFJlZ2lzdGVyOiAlMDJ4IFdlcnQ6ICUwMnhcbiIsaSwgYVMxRFJlZ3NbaV0uSW5kZXgsIGFTMURSZWdzW2ldLlZhbHVlKTsgKi8KLSAgICAgICAgKChTMURfVkFMVUUqKWZiX2luZm8uUmVnQWRkcilbczFkUmVnL3NpemVvZihTMURfVkFMVUUpXSA9IHMxZFZhbHVlOwotICAgIH0KKwkJKChTMURfVkFMVUUgKikgZmJfaW5mby5SZWdBZGRyKVtzMWRSZWcgLyBzaXplb2YgKFMxRF9WQUxVRSldID0KKwkJCQlzMWRWYWx1ZTsKKwl9CiAKICN1bmRlZiBNT05PQ0hST01FCiAjaWZkZWYgTU9OT0NIUk9NRQotICAgCXN3aXRjaChiZC0+YmlfYnVzZnJlcSl7CisJc3dpdGNoIChiZC0+YmlfYnVzZnJlcSkgewogI2lmIDAKLQkJY2FzZSAyNDAwMDAwMDoKLQkJCSgoUzFEX1ZBTFVFKilmYl9pbmZvLlJlZ0FkZHIpWzB4MDVdID0gMHgzMjsKLQkJCSgoUzFEX1ZBTFVFKilmYl9pbmZvLlJlZ0FkZHIpWzB4MTJdID0gMHgyODsKLQkJCWJyZWFrOwotCQljYXNlIDMyMDAwMDAwOgotCQkJKChTMURfVkFMVUUqKWZiX2luZm8uUmVnQWRkcilbMHgwNV0gPSAweDMyOwotCQkJKChTMURfVkFMVUUqKWZiX2luZm8uUmVnQWRkcilbMHgxMl0gPSAweDMzOwotCQkJYnJlYWs7CisJY2FzZSAyNDAwMDAwMDoKKwkJKChTMURfVkFMVUUgKikgZmJfaW5mby5SZWdBZGRyKVsweDA1XSA9IDB4MzI7CisJCSgoUzFEX1ZBTFVFICopIGZiX2luZm8uUmVnQWRkcilbMHgxMl0gPSAweDI4OworCQlicmVhazsKKwljYXNlIDMyMDAwMDAwOgorCQkoKFMxRF9WQUxVRSAqKSBmYl9pbmZvLlJlZ0FkZHIpWzB4MDVdID0gMHgzMjsKKwkJKChTMURfVkFMVUUgKikgZmJfaW5mby5SZWdBZGRyKVsweDEyXSA9IDB4MzM7CisJCWJyZWFrOwogI2VuZGlmCi0JCWNhc2UgNDAwMDAwMDA6Ci0JCQkoKFMxRF9WQUxVRSopZmJfaW5mby5SZWdBZGRyKVsweDA1XSA9IDB4MzI7Ci0JCQkoKFMxRF9WQUxVRSopZmJfaW5mby5SZWdBZGRyKVsweDEyXSA9IDB4NDA7Ci0JCQlicmVhazsKLQkJY2FzZSA0ODAwMDAwMDoKLQkJCSgoUzFEX1ZBTFVFKilmYl9pbmZvLlJlZ0FkZHIpWzB4MDVdID0gMHgzMjsKLQkJCSgoUzFEX1ZBTFVFKilmYl9pbmZvLlJlZ0FkZHIpWzB4MTJdID0gMHg0QzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRmKCJLVVA0SyBTMUQxOiB1bmtub3duIGJ1c2ZyZXF1ZW5jeTogJWxkIGFzc3VtaW5nIDY0IE1IelxuIixiZC0+YmlfYnVzZnJlcSk7Ci0JCWNhc2UgNjQwMDAwMDA6Ci0JCQkoKFMxRF9WQUxVRSopZmJfaW5mby5SZWdBZGRyKVsweDA1XSA9IDB4MzI7Ci0JCQkoKFMxRF9WQUxVRSopZmJfaW5mby5SZWdBZGRyKVsweDEyXSA9IDB4Njk7Ci0JCQlicmVhazsKKwljYXNlIDQwMDAwMDAwOgorCQkoKFMxRF9WQUxVRSAqKSBmYl9pbmZvLlJlZ0FkZHIpWzB4MDVdID0gMHgzMjsKKwkJKChTMURfVkFMVUUgKikgZmJfaW5mby5SZWdBZGRyKVsweDEyXSA9IDB4NDA7CisJCWJyZWFrOworCWNhc2UgNDgwMDAwMDA6CisJCSgoUzFEX1ZBTFVFICopIGZiX2luZm8uUmVnQWRkcilbMHgwNV0gPSAweDMyOworCQkoKFMxRF9WQUxVRSAqKSBmYl9pbmZvLlJlZ0FkZHIpWzB4MTJdID0gMHg0QzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiS1VQNEsgUzFEMTogdW5rbm93biBidXNmcmVxdWVuY3k6ICVsZCBhc3N1bWluZyA2NCBNSHpcbiIsCisJCQkJYmQtPmJpX2J1c2ZyZXEpOworCWNhc2UgNjQwMDAwMDA6CisJCSgoUzFEX1ZBTFVFICopIGZiX2luZm8uUmVnQWRkcilbMHgwNV0gPSAweDMyOworCQkoKFMxRF9WQUxVRSAqKSBmYl9pbmZvLlJlZ0FkZHIpWzB4MTJdID0gMHg2OTsKKwkJYnJlYWs7CiAJfQotCSgoUzFEX1ZBTFVFKilmYl9pbmZvLlJlZ0FkZHIpWzB4MTBdID0gMHgwMDsKKwkoKFMxRF9WQUxVRSAqKSBmYl9pbmZvLlJlZ0FkZHIpWzB4MTBdID0gMHgwMDsKICNlbHNlCi0JICAgCXN3aXRjaChiZC0+YmlfYnVzZnJlcSl7CisJc3dpdGNoIChiZC0+YmlfYnVzZnJlcSkgewogI2lmIDAKLQkJY2FzZSAyNDAwMDAwMDoKLQkJCSgoUzFEX1ZBTFVFKilmYl9pbmZvLlJlZ0FkZHIpWzB4MDVdID0gMHgyMjsKLQkJCSgoUzFEX1ZBTFVFKilmYl9pbmZvLlJlZ0FkZHIpWzB4MTJdID0gMHgzNDsKLQkJCWJyZWFrOwotCQljYXNlIDMyMDAwMDAwOgotCQkJKChTMURfVkFMVUUqKWZiX2luZm8uUmVnQWRkcilbMHgwNV0gPSAweDMyOwotCQkJKChTMURfVkFMVUUqKWZiX2luZm8uUmVnQWRkcilbMHgxMl0gPSAweDM0OwotCQkJYnJlYWs7CisJY2FzZSAyNDAwMDAwMDoKKwkJKChTMURfVkFMVUUgKikgZmJfaW5mby5SZWdBZGRyKVsweDA1XSA9IDB4MjI7CisJCSgoUzFEX1ZBTFVFICopIGZiX2luZm8uUmVnQWRkcilbMHgxMl0gPSAweDM0OworCQlicmVhazsKKwljYXNlIDMyMDAwMDAwOgorCQkoKFMxRF9WQUxVRSAqKSBmYl9pbmZvLlJlZ0FkZHIpWzB4MDVdID0gMHgzMjsKKwkJKChTMURfVkFMVUUgKikgZmJfaW5mby5SZWdBZGRyKVsweDEyXSA9IDB4MzQ7CisJCWJyZWFrOwogI2VuZGlmCi0JCWNhc2UgNDAwMDAwMDA6Ci0JCQkoKFMxRF9WQUxVRSopZmJfaW5mby5SZWdBZGRyKVsweDA1XSA9IDB4MzI7Ci0JCQkoKFMxRF9WQUxVRSopZmJfaW5mby5SZWdBZGRyKVsweDEyXSA9IDB4NDE7Ci0JCQlicmVhazsKLQkJY2FzZSA0ODAwMDAwMDoKLQkJCSgoUzFEX1ZBTFVFKilmYl9pbmZvLlJlZ0FkZHIpWzB4MDVdID0gMHgyMjsKLQkJCSgoUzFEX1ZBTFVFKilmYl9pbmZvLlJlZ0FkZHIpWzB4MTJdID0gMHgzNDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRmKCJLVVA0SyBTMUQxOiB1bmtub3duIGJ1c2ZyZXF1ZW5jeTogJWxkIGFzc3VtaW5nIDY0IE1IelxuIixiZC0+YmlfYnVzZnJlcSk7Ci0JCWNhc2UgNjQwMDAwMDA6Ci0JCQkoKFMxRF9WQUxVRSopZmJfaW5mby5SZWdBZGRyKVsweDA1XSA9IDB4MzI7Ci0JCQkoKFMxRF9WQUxVRSopZmJfaW5mby5SZWdBZGRyKVsweDEyXSA9IDB4NjY7Ci0JCQlicmVhazsKKwljYXNlIDQwMDAwMDAwOgorCQkoKFMxRF9WQUxVRSAqKSBmYl9pbmZvLlJlZ0FkZHIpWzB4MDVdID0gMHgzMjsKKwkJKChTMURfVkFMVUUgKikgZmJfaW5mby5SZWdBZGRyKVsweDEyXSA9IDB4NDE7CisJCWJyZWFrOworCWNhc2UgNDgwMDAwMDA6CisJCSgoUzFEX1ZBTFVFICopIGZiX2luZm8uUmVnQWRkcilbMHgwNV0gPSAweDIyOworCQkoKFMxRF9WQUxVRSAqKSBmYl9pbmZvLlJlZ0FkZHIpWzB4MTJdID0gMHgzNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiS1VQNEsgUzFEMTogdW5rbm93biBidXNmcmVxdWVuY3k6ICVsZCBhc3N1bWluZyA2NCBNSHpcbiIsCisJCQkJYmQtPmJpX2J1c2ZyZXEpOworCWNhc2UgNjQwMDAwMDA6CisJCSgoUzFEX1ZBTFVFICopIGZiX2luZm8uUmVnQWRkcilbMHgwNV0gPSAweDMyOworCQkoKFMxRF9WQUxVRSAqKSBmYl9pbmZvLlJlZ0FkZHIpWzB4MTJdID0gMHg2NjsKKwkJYnJlYWs7CiAJfQogI2VuZGlmCiAKKwotICAgIAotICAgIC8qIGNyZWF0ZSBhbmQgc2V0IGNvbG9ybWFwICovCi0gICAgcnMgPSAyNTYgLyAociAtIDEpOwotICAgIGdzID0gMjU2IC8gKGcgLSAxKTsKLSAgICBicyA9IDI1NiAvIChiIC0gMSk7Ci0JZm9yKGk9MDtpPDI1NjtpKyspewotICAgICAgIHIxPShycyAqICgoaSAvIChnICogYikpICUgcikpICogMjU1OwotICAgICAgIGcxPShncyAqICgoaSAvIGIpICUgZykpICogMjU1OwotICAgICAgIGIxPShicyAqICgoaSkgJSBiKSkgKiAyNTU7CisJLyogY3JlYXRlIGFuZCBzZXQgY29sb3JtYXAgKi8KKwlycyA9IDI1NiAvIChyIC0gMSk7CisJZ3MgPSAyNTYgLyAoZyAtIDEpOworCWJzID0gMjU2IC8gKGIgLSAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJcjEgPSAocnMgKiAoKGkgLyAoZyAqIGIpKSAlIHIpKSAqIDI1NTsKKwkJZzEgPSAoZ3MgKiAoKGkgLyBiKSAlIGcpKSAqIDI1NTsKKwkJYjEgPSAoYnMgKiAoKGkpICUgYikpICogMjU1OwogLyogICAgIHByaW50ZigiJWQgJTA0eCAlMDR4ICUwNHhcbiIsaSxyMT4+NCxnMT4+NCxiMT4+NCk7ICovCi0gICAgICAgUzFEX1dSSVRFX1BBTEVUVEUoZmJfaW5mby5SZWdBZGRyLGksKHIxPj40KSwoZzE+PjQpLChiMT4+NCkpOwotICAgIH0KKwkJUzFEX1dSSVRFX1BBTEVUVEUgKGZiX2luZm8uUmVnQWRkciwgaSwgKHIxID4+IDQpLCAoZzEgPj4gNCksCisJCQkJCQkgICAoYjEgPj4gNCkpOworCX0KIAotICAgIC8qIGNvcHkgYml0bWFwICovCi0JZmIgICA9IChjaGFyICopIChmYl9pbmZvLlZtZW1BZGRyKTsKLQltZW1jcHkgKGZiLCAodWNoYXIgKilDT05GSUdfS1VQNEtfTE9HTywgMzIwICogMjQwKTsKKwkvKiBjb3B5IGJpdG1hcCAqLworCWZiID0gKGNoYXIgKikgKGZiX2luZm8uVm1lbUFkZHIpOworCW1lbWNweSAoZmIsICh1Y2hhciAqKSBDT05GSUdfS1VQNEtfTE9HTywgMzIwICogMjQwKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfS1VQNEtfTE9HTyAqLworI2VuZGlmCQkJCQkJCS8qIENPTkZJR19LVVA0S19MT0dPICovCiAKICNpZmRlZiBDT05GSUdfSURFX0xFRAogdm9pZCBpZGVfbGVkICh1Y2hhciBsZWQsIHVjaGFyIHN0YXR1cykKIHsKLQl2b2xhdGlsZSBpbW1hcF90CSppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKKwogCS8qIFdlIGhhdmUgb25lIGxlZCBmb3IgYm90aCBwY21jaWEgc2xvdHMgKi8KLQlpZiAoc3RhdHVzKSB7IC8qIGxlZCBvbiAqLworCWlmIChzdGF0dXMpIHsJCQkJLyogbGVkIG9uICovCiAJCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0ICY9IH4weDgwOwogCX0gZWxzZSB7CiAJCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGF0IHw9IDB4ODA7CmRpZmYgLS1naXQgYS9ib2FyZC9rdXA0ay9zMWQxMzcwNi5oIGIvYm9hcmQva3VwNGsvczFkMTM3MDYuaAppbmRleCA0ZWVlYTM5Li45MDAyN2JmIDEwMDY0NAotLS0gYS9ib2FyZC9rdXA0ay9zMWQxMzcwNi5oCisrKyBiL2JvYXJkL2t1cDRrL3MxZDEzNzA2LmgKQEAgLTUwLDY2ICs1MCw2NCBAQAogCiBzdGF0aWMgUzFEX1JFR1MgYVMxRFJlZ3NbXSA9CiB7Ci0KLQotICAgIHsweDA0LDB4MTB9LCAgIC8qIEJVU0NMSyBNRU1DTEsgQ29uZmlnIFJlZ2lzdGVyICovCisJezB4MDQsMHgxMH0sCS8qIEJVU0NMSyBNRU1DTEsgQ29uZmlnIFJlZ2lzdGVyICovCiAjaWYgMAotICAgIHsweDA1LDB4MzJ9LCAgIC8qIFBDTEsgQ29uZmlnICBSZWdpc3RlciAgKi8KKwl7MHgwNSwweDMyfSwJLyogUENMSyBDb25maWcgIFJlZ2lzdGVyICAqLwogI2VuZGlmCi0gICAgezB4MTAsMHhEMH0sICAgLyogUEFORUwgVHlwZSBSZWdpc3RlciAqLwotICAgIHsweDExLDB4MDB9LCAgIC8qIE1PRCBSYXRlIFJlZ2lzdGVyICovCisJezB4MTAsMHhEMH0sCS8qIFBBTkVMIFR5cGUgUmVnaXN0ZXIgKi8KKwl7MHgxMSwweDAwfSwJLyogTU9EIFJhdGUgUmVnaXN0ZXIgKi8KICNpZiAwCi0gICAgezB4MTIsMHgzNH0sICAgLyogSG9yaXpvbnRhbCBUb3RhbCBSZWdpc3RlciAqLworCXsweDEyLDB4MzR9LAkvKiBIb3Jpem9udGFsIFRvdGFsIFJlZ2lzdGVyICovCiAjZW5kaWYKLSAgICB7MHgxNCwweDI3fSwgICAvKiBIb3Jpem9udGFsIERpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyICovCi0gICAgezB4MTYsMHgwMH0sICAgLyogSG9yaXpvbnRhbCBEaXNwbGF5IFBlcmlvZCBTdGFydCBQb3MgUmVnaXN0ZXIgMCAqLwotICAgIHsweDE3LDB4MDB9LCAgIC8qIEhvcml6b250YWwgRGlzcGxheSBQZXJpb2QgU3RhcnQgUG9zIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgxOCwweEYwfSwgICAvKiBWZXJ0aWNhbCBUb3RhbCBSZWdpc3RlciAwICAqLwotICAgIHsweDE5LDB4MDB9LCAgIC8qIFZlcnRpY2FsIFRvdGFsIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgxQywweEVGfSwgICAvKiBWZXJ0aWNhbCBEaXNwbGF5IFBlcmlvZCBSZWdpc3RlciAwICovCi0gICAgezB4MUQsMHgwMH0sICAgLyogVmVydGljYWwgRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgMSAqLwotICAgIHsweDFFLDB4MDB9LCAgIC8qIFZlcnRpY2FsIERpc3BsYXkgUGVyaW9kIFN0YXJ0IFBvcyBSZWdpc3RlciAwICovCi0gICAgezB4MUYsMHgwMH0sICAgLyogVmVydGljYWwgRGlzcGxheSBQZXJpb2QgU3RhcnQgUG9zIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgyMCwweDg3fSwgICAvKiBIb3Jpem9udGFsIFN5bmMgUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KLSAgICB7MHgyMiwweDAwfSwgICAvKiBIb3Jpem9udGFsIFN5bmMgUHVsc2UgU3RhcnQgUG9zIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHgyMywweDAwfSwgICAvKiBIb3Jpem9udGFsIFN5bmMgUHVsc2UgU3RhcnQgUG9zIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHgyNCwweDgwfSwgICAvKiBWZXJ0aWNhbCBTeW5jIFB1bHNlIFdpZHRoIFJlZ2lzdGVyICovCi0gICAgezB4MjYsMHgwMX0sICAgLyogVmVydGljYWwgU3luYyBQdWxzZSBTdGFydCBQb3MgUmVnaXN0ZXIgMCAqLwotICAgIHsweDI3LDB4MDB9LCAgIC8qIFZlcnRpY2FsIFN5bmMgUHVsc2UgU3RhcnQgUG9zIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHg3MCwweDgzfSwgICAvKiBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIgKi8KLSAgICB7MHg3MSwweDAwfSwgICAvKiBTcGVjaWFsIEVmZmVjdHMgUmVnaXN0ZXIgKi8KLSAgICB7MHg3NCwweDAwfSwgICAvKiBNYWluIFdpbmRvdyBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCAqLwotICAgIHsweDc1LDB4MDB9LCAgIC8qIE1haW4gV2luZG93IERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxICovCi0gICAgezB4NzYsMHgwMH0sICAgLyogTWFpbiBXaW5kb3cgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KLSAgICB7MHg3OCwweDUwfSwgICAvKiBNYWluIFdpbmRvdyBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwICovCi0gICAgezB4NzksMHgwMH0sICAgLyogTWFpbiBXaW5kb3cgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSAqLwotICAgIHsweDdDLDB4MDB9LCAgIC8qIFN1YiBXaW5kb3cgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHg3RCwweDAwfSwgICAvKiBTdWIgV2luZG93IERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxICovCi0gICAgezB4N0UsMHgwMH0sICAgLyogU3ViIFdpbmRvdyBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiAqLwotICAgIHsweDgwLDB4NTB9LCAgIC8qIFN1YiBXaW5kb3cgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCAqLwotICAgIHsweDgxLDB4MDB9LCAgIC8qIFN1YiBXaW5kb3cgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSAqLwotICAgIHsweDg0LDB4MDB9LCAgIC8qIFN1YiBXaW5kb3cgWCBTdGFydCBQb3MgUmVnaXN0ZXIgMCAqLwotICAgIHsweDg1LDB4MDB9LCAgIC8qIFN1YiBXaW5kb3cgWCBTdGFydCBQb3MgUmVnaXN0ZXIgMSAqLwotICAgIHsweDg4LDB4MDB9LCAgIC8qIFN1YiBXaW5kb3cgWSBTdGFydCBQb3MgUmVnaXN0ZXIgMCAqLwotICAgIHsweDg5LDB4MDB9LCAgIC8qIFN1YiBXaW5kb3cgWSBTdGFydCBQb3MgUmVnaXN0ZXIgMSAqLwotICAgIHsweDhDLDB4NEZ9LCAgIC8qIFN1YiBXaW5kb3cgWCBFbmQgUG9zIFJlZ2lzdGVyIDAgKi8KLSAgICB7MHg4RCwweDAwfSwgICAvKiBTdWIgV2luZG93IFggRW5kIFBvcyBSZWdpc3RlciAxICovCi0gICAgezB4OTAsMHhFRn0sICAgLyogU3ViIFdpbmRvdyBZIEVuZCBQb3MgUmVnaXN0ZXIgMCAqLwotICAgIHsweDkxLDB4MDB9LCAgIC8qIFN1YiBXaW5kb3cgWSBFbmQgUG9zIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHhBMCwweDAwfSwgICAvKiBQb3dlciBTYXZlIENvbmZpZyBSZWdpc3RlciAqLwotICAgIHsweEExLDB4MDB9LCAgIC8qIENQVSBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlciAqLwotICAgIHsweEEyLDB4MDB9LCAgIC8qIFNvZnR3YXJlIFJlc2V0IFJlZ2lzdGVyICovCi0gICAgezB4QTMsMHgwMH0sICAgLyogQklHIEVuZGlhbiBTdXBwb3J0IFJlZ2lzdGVyICovCi0gICAgezB4QTQsMHgwMH0sICAgLyogU2NyYXRjaCBQYWQgUmVnaXN0ZXIgMCAqLwotICAgIHsweEE1LDB4MDB9LCAgIC8qIFNjcmF0Y2ggUGFkIFJlZ2lzdGVyIDEgKi8KLSAgICB7MHhBOCwweDAxfSwgICAvKiBHUElPIENvbmZpZyBSZWdpc3RlciAwICovCi0gICAgezB4QTksMHg4MH0sICAgLyogR1BJTyBDb25maWcgUmVnaXN0ZXIgMSAqLwotICAgIHsweEFDLDB4MDF9LCAgIC8qIEdQSU8gU3RhdHVzIENvbnRyb2wgUmVnaXN0ZXIgMCAqLwotICAgIHsweEFELDB4MDB9LCAgIC8qIEdQSU8gU3RhdHVzIENvbnRyb2wgUmVnaXN0ZXIgMSAqLwotICAgIHsweEIwLDB4MDB9LCAgIC8qIFBXTSBDViBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovCi0gICAgezB4QjEsMHgwMH0sICAgLyogUFdNIENWIENsb2NrIENvbmZpZyBSZWdpc3RlciAqLwotICAgIHsweEIyLDB4MDB9LCAgIC8qIENWIENsb2NrIEJ1cnN0IExlbmd0aCBSZWdpc3RlciAqLwotICAgIHsweEIzLDB4MDB9LCAgIC8qIFBXTSBDbG9jayBEdXR5IEN5Y2xlIFJlZ2lzdGVyICovCi0gICAgezB4QUQsMHg4MH0sICAgLyogcmVzZXQgc2VxICovCi0JezB4NzAsMHgwM30sICAgLyogICovCisJezB4MTQsMHgyN30sCS8qIEhvcml6b250YWwgRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgKi8KKwl7MHgxNiwweDAwfSwJLyogSG9yaXpvbnRhbCBEaXNwbGF5IFBlcmlvZCBTdGFydCBQb3MgUmVnaXN0ZXIgMCAqLworCXsweDE3LDB4MDB9LAkvKiBIb3Jpem9udGFsIERpc3BsYXkgUGVyaW9kIFN0YXJ0IFBvcyBSZWdpc3RlciAxICovCisJezB4MTgsMHhGMH0sCS8qIFZlcnRpY2FsIFRvdGFsIFJlZ2lzdGVyIDAgICovCisJezB4MTksMHgwMH0sCS8qIFZlcnRpY2FsIFRvdGFsIFJlZ2lzdGVyIDEgKi8KKwl7MHgxQywweEVGfSwJLyogVmVydGljYWwgRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgMCAqLworCXsweDFELDB4MDB9LAkvKiBWZXJ0aWNhbCBEaXNwbGF5IFBlcmlvZCBSZWdpc3RlciAxICovCisJezB4MUUsMHgwMH0sCS8qIFZlcnRpY2FsIERpc3BsYXkgUGVyaW9kIFN0YXJ0IFBvcyBSZWdpc3RlciAwICovCisJezB4MUYsMHgwMH0sCS8qIFZlcnRpY2FsIERpc3BsYXkgUGVyaW9kIFN0YXJ0IFBvcyBSZWdpc3RlciAxICovCisJezB4MjAsMHg4N30sCS8qIEhvcml6b250YWwgU3luYyBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLworCXsweDIyLDB4MDB9LAkvKiBIb3Jpem9udGFsIFN5bmMgUHVsc2UgU3RhcnQgUG9zIFJlZ2lzdGVyIDAgKi8KKwl7MHgyMywweDAwfSwJLyogSG9yaXpvbnRhbCBTeW5jIFB1bHNlIFN0YXJ0IFBvcyBSZWdpc3RlciAxICovCisJezB4MjQsMHg4MH0sCS8qIFZlcnRpY2FsIFN5bmMgUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KKwl7MHgyNiwweDAxfSwJLyogVmVydGljYWwgU3luYyBQdWxzZSBTdGFydCBQb3MgUmVnaXN0ZXIgMCAqLworCXsweDI3LDB4MDB9LAkvKiBWZXJ0aWNhbCBTeW5jIFB1bHNlIFN0YXJ0IFBvcyBSZWdpc3RlciAxICovCisJezB4NzAsMHg4M30sCS8qIERpc3BsYXkgTW9kZSBSZWdpc3RlciAqLworCXsweDcxLDB4MDB9LAkvKiBTcGVjaWFsIEVmZmVjdHMgUmVnaXN0ZXIgKi8KKwl7MHg3NCwweDAwfSwJLyogTWFpbiBXaW5kb3cgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKwl7MHg3NSwweDAwfSwJLyogTWFpbiBXaW5kb3cgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KKwl7MHg3NiwweDAwfSwJLyogTWFpbiBXaW5kb3cgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKwl7MHg3OCwweDUwfSwJLyogTWFpbiBXaW5kb3cgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCAqLworCXsweDc5LDB4MDB9LAkvKiBNYWluIFdpbmRvdyBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxICovCisJezB4N0MsMHgwMH0sCS8qIFN1YiBXaW5kb3cgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKwl7MHg3RCwweDAwfSwJLyogU3ViIFdpbmRvdyBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworCXsweDdFLDB4MDB9LAkvKiBTdWIgV2luZG93IERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCisJezB4ODAsMHg1MH0sCS8qIFN1YiBXaW5kb3cgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCAqLworCXsweDgxLDB4MDB9LAkvKiBTdWIgV2luZG93IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEgKi8KKwl7MHg4NCwweDAwfSwJLyogU3ViIFdpbmRvdyBYIFN0YXJ0IFBvcyBSZWdpc3RlciAwICovCisJezB4ODUsMHgwMH0sCS8qIFN1YiBXaW5kb3cgWCBTdGFydCBQb3MgUmVnaXN0ZXIgMSAqLworCXsweDg4LDB4MDB9LAkvKiBTdWIgV2luZG93IFkgU3RhcnQgUG9zIFJlZ2lzdGVyIDAgKi8KKwl7MHg4OSwweDAwfSwJLyogU3ViIFdpbmRvdyBZIFN0YXJ0IFBvcyBSZWdpc3RlciAxICovCisJezB4OEMsMHg0Rn0sCS8qIFN1YiBXaW5kb3cgWCBFbmQgUG9zIFJlZ2lzdGVyIDAgKi8KKwl7MHg4RCwweDAwfSwJLyogU3ViIFdpbmRvdyBYIEVuZCBQb3MgUmVnaXN0ZXIgMSAqLworCXsweDkwLDB4RUZ9LAkvKiBTdWIgV2luZG93IFkgRW5kIFBvcyBSZWdpc3RlciAwICovCisJezB4OTEsMHgwMH0sCS8qIFN1YiBXaW5kb3cgWSBFbmQgUG9zIFJlZ2lzdGVyIDEgKi8KKwl7MHhBMCwweDAwfSwJLyogUG93ZXIgU2F2ZSBDb25maWcgUmVnaXN0ZXIgKi8KKwl7MHhBMSwweDAwfSwJLyogQ1BVIEFjY2VzcyBDb250cm9sIFJlZ2lzdGVyICovCisJezB4QTIsMHgwMH0sCS8qIFNvZnR3YXJlIFJlc2V0IFJlZ2lzdGVyICovCisJezB4QTMsMHgwMH0sCS8qIEJJRyBFbmRpYW4gU3VwcG9ydCBSZWdpc3RlciAqLworCXsweEE0LDB4MDB9LAkvKiBTY3JhdGNoIFBhZCBSZWdpc3RlciAwICovCisJezB4QTUsMHgwMH0sCS8qIFNjcmF0Y2ggUGFkIFJlZ2lzdGVyIDEgKi8KKwl7MHhBOCwweDAxfSwJLyogR1BJTyBDb25maWcgUmVnaXN0ZXIgMCAqLworCXsweEE5LDB4ODB9LAkvKiBHUElPIENvbmZpZyBSZWdpc3RlciAxICovCisJezB4QUMsMHgwMX0sCS8qIEdQSU8gU3RhdHVzIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworCXsweEFELDB4MDB9LAkvKiBHUElPIFN0YXR1cyBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKwl7MHhCMCwweDEwfSwJLyogUFdNIENWIENsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl7MHhCMSwweDgwfSwJLyogUFdNIENWIENsb2NrIENvbmZpZyBSZWdpc3RlciAqLworCXsweEIyLDB4MDB9LAkvKiBDViBDbG9jayBCdXJzdCBMZW5ndGggUmVnaXN0ZXIgKi8KKwl7MHhCMywweEEwfSwJLyogUFdNIENsb2NrIER1dHkgQ3ljbGUgUmVnaXN0ZXIgKi8KKwl7MHhBRCwweDgwfSwJLyogcmVzZXQgc2VxICovCisJezB4NzAsMHgwM30sCS8qICAqLwogfTsKZGlmZiAtLWdpdCBhL2JvYXJkL3JiYzgyMy9NYWtlZmlsZSBiL2JvYXJkL3JiYzgyMy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTEyNDUxCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvcmJjODIzL01ha2VmaWxlCkBAIC0wLDAgKzEsNDAgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAwCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEJPQVJEKS5hCisKK09CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8ga2JkLm8KKworJChMSUIpOgkuZGVwZW5kICQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJF4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworc2luY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9yYmM4MjMvY29uZmlnLm1rIGIvYm9hcmQvcmJjODIzL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTllYTNjCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvcmJjODIzL2NvbmZpZy5tawpAQCAtMCwwICsxLDI4IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMAorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIFJCQzgyMyBib2FyZHMKKyMKKworVEVYVF9CQVNFID0gMHhGRkYwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvcmJjODIzL2ZsYXNoLmMgYi9ib2FyZC9yYmM4MjMvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTJkMGJlCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvcmJjODIzL2ZsYXNoLmMKQEAgLTAsMCArMSw0NzAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzh4eC5oPgorCitmbGFzaF9pbmZvX3QJZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsgLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRnVuY3Rpb25zCisgKi8KK3N0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZSAodnVfbG9uZyAqYWRkciwgZmxhc2hfaW5mb190ICppbmZvKTsKK3N0YXRpYyBpbnQgd3JpdGVfd29yZCAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCB1bG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIGZsYXNoX2dldF9vZmZzZXRzICh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKmluZm8pOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwordW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZV9iMCwgc2l6ZV9iMTsKKwlpbnQgaTsKKworCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KKwlmb3IgKGk9MDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7ICsraSkKKwkgICAgZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisKKwkvKiBEZXRlY3Qgc2l6ZSAqLworCXNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKUNGR19GTEFTSF9CQVNFLCAmZmxhc2hfaW5mb1swXSk7CisKKwkvKiBTZXR1cCBvZmZzZXRzICovCisJZmxhc2hfZ2V0X29mZnNldHMgKENGR19GTEFTSF9CQVNFLCAmZmxhc2hfaW5mb1swXSk7CisKKyNpZiBDRkdfTU9OSVRPUl9CQVNFID49IENGR19GTEFTSF9CQVNFCisJLyogTW9uaXRvciBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KKwlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCSAgICAgIENGR19NT05JVE9SX0JBU0UsCisJCSAgICAgIENGR19NT05JVE9SX0JBU0UrbW9uaXRvcl9mbGFzaF9sZW4tMSwKKwkJICAgICAgJmZsYXNoX2luZm9bMF0pOworI2VuZGlmCisKKwlzaXplX2IxID0gMCA7CisKKwlmbGFzaF9pbmZvWzFdLmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwlmbGFzaF9pbmZvWzFdLnNlY3Rvcl9jb3VudCA9IC0xOworCisJZmxhc2hfaW5mb1swXS5zaXplID0gc2l6ZV9iMDsKKwlmbGFzaF9pbmZvWzFdLnNpemUgPSBzaXplX2IxOworCisJcmV0dXJuIChzaXplX2IwICsgc2l6ZV9iMSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZpeCB0aGlzIHRvIHN1cHBvcnQgdmFyaWFibGUgc2VjdG9yIHNpemVzCisqLworc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbykKK3sKKwlpbnQgaTsKKworCS8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRkcmVzcyB0YWJsZSAqLworCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0wNDApIHsKKwkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlCSovCisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKKwkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCk7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQgZmxhc2hfcHJpbnRfaW5mbyAgKGZsYXNoX2luZm9fdCAqaW5mbykKK3sKKwlpbnQgaTsKKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKQorCXsKKwkJcHV0cyAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykKKwl7CisJCWNhc2UgRkxBU0hfTUFOX0FNRDoJcHJpbnRmICgiQU1EICIpOwkJYnJlYWs7CisJCWNhc2UgRkxBU0hfTUFOX0ZVSjoJcHJpbnRmICgiRlVKSVRTVSAiKTsJCWJyZWFrOworCQljYXNlIEZMQVNIX01BTl9CTToJcHJpbnRmICgiQlJJR0hUIE1JQ1JPICIpOwlicmVhazsKKwkJZGVmYXVsdDoJCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOwlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spCisJeworCQljYXNlIEZMQVNIX0FNMDQwOglwcmludGYgKCIyOUYwNDAgb3IgMjlMVjA0MCAoNCBNYml0LCB1bmlmb3JtIHNlY3RvcnMpXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX0FNNDAwQjoJcHJpbnRmICgiQU0yOUxWNDAwQiAoNCBNYml0LCBib3R0b20gYm9vdCBzZWN0KVxuIik7CisJCQkJCWJyZWFrOworCQljYXNlIEZMQVNIX0FNNDAwVDoJcHJpbnRmICgiQU0yOUxWNDAwVCAoNCBNYml0LCB0b3AgYm9vdCBzZWN0b3IpXG4iKTsKKwkJCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfQU04MDBCOglwcmludGYgKCJBTTI5TFY4MDBCICg4IE1iaXQsIGJvdHRvbSBib290IHNlY3QpXG4iKTsKKwkJCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfQU04MDBUOglwcmludGYgKCJBTTI5TFY4MDBUICg4IE1iaXQsIHRvcCBib290IHNlY3RvcilcbiIpOworCQkJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9BTTE2MEI6CXByaW50ZiAoIkFNMjlMVjE2MEIgKDE2IE1iaXQsIGJvdHRvbSBib290IHNlY3QpXG4iKTsKKwkJCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfQU0xNjBUOglwcmludGYgKCJBTTI5TFYxNjBUICgxNiBNYml0LCB0b3AgYm9vdCBzZWN0b3IpXG4iKTsKKwkJCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfQU0zMjBCOglwcmludGYgKCJBTTI5TFYzMjBCICgzMiBNYml0LCBib3R0b20gYm9vdCBzZWN0KVxuIik7CisJCQkJCWJyZWFrOworCQljYXNlIEZMQVNIX0FNMzIwVDoJcHJpbnRmICgiQU0yOUxWMzIwVCAoMzIgTWJpdCwgdG9wIGJvb3Qgc2VjdG9yKVxuIik7CisJCQkJCWJyZWFrOworCQlkZWZhdWx0OgkJcHJpbnRmICgiVW5rbm93biBDaGlwIFR5cGVcbiIpOworCQkJCQlicmVhazsKKwl9CisKKwlpZiAoaW5mby0+c2l6ZSA+PiAyMCkgeworCSAgICBwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAorCSAgICAJaW5mby0+c2l6ZSA+PiAyMCwKKwkJaW5mby0+c2VjdG9yX2NvdW50KTsKKwl9IGVsc2UgeworCSAgICBwcmludGYgKCIgIFNpemU6ICVsZCBLQiBpbiAlZCBTZWN0b3JzXG4iLAorCSAgICAJaW5mby0+c2l6ZSA+PiAxMCwKKwkJaW5mby0+c2VjdG9yX2NvdW50KTsKKwl9CisKKwlwdXRzICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOworCisJZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpCisJeworCQlpZiAoKGkgJSA1KSA9PSAwKQorCQl7CisJCQlwdXRzICgiXG4gICAiKTsKKwkJfQorCisJCXByaW50ZiAoIiAlMDhsWCVzIiwKKwkJCWluZm8tPnN0YXJ0W2ldLAorCQkJaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiKTsKKwl9CisKKwlwdXRjICgnXG4nKTsKKwlyZXR1cm47Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBjYW5ub3QgYmUgcnVuIGZyb20gRkxBU0ghCisgKi8KKworc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplICh2dV9sb25nICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pCit7CisJc2hvcnQgaTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpjYWRkcjsKKwljaGFyIHZhbHVlOworCisJY2FkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKWFkZHIgOworCisJLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KKworI2lmIDAKKwlwcmludGYoIkJhc2UgYWRkcmVzcyBpczogJTA4eFxuIiwgY2FkZHIpOworI2VuZGlmCisKKwljYWRkclsweDA1NTVdID0gMHhBQTsKKwljYWRkclsweDAyQUFdID0gMHg1NTsKKwljYWRkclsweDA1NTVdID0gMHg5MDsKKworCXZhbHVlID0gY2FkZHJbMF07CisKKyNpZiAwCisJcHJpbnRmKCJNYW51ZmFjdCBJRDogJTAyeFxuIiwgdmFsdWUpOworI2VuZGlmCisJc3dpdGNoICh2YWx1ZSkKKwl7CisJCWNhc2UgMHgwMToKKwkJY2FzZSBBTURfTUFOVUZBQ1Q6CisJCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQ7CisJCWJyZWFrOworCisJCWNhc2UgRlVKX01BTlVGQUNUOgorCQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fRlVKOworCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKKwkJCWluZm8tPnNpemUgPSAwOworCQkJYnJlYWs7CisJfQorCisJdmFsdWUgPSBjYWRkclsxXTsJCQkvKiBkZXZpY2UgSUQJCSovCisjaWYgMAorCXByaW50ZigiRGV2aWNlIElEOiAlMDJ4XG4iLCB2YWx1ZSk7CisjZW5kaWYKKwlzd2l0Y2ggKHZhbHVlKQorCXsKKwkJY2FzZSBBTURfSURfTFYwNDBCOgorCQkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU0wNDA7CisJCQlpbmZvLT5zZWN0b3JfY291bnQgPSA4OworCQkJaW5mby0+c2l6ZSA9IDB4MDAwODAwMDA7CisJCQlicmVhazsJCQkJLyogPT4gNTEyS2IgCQkqLworCisJCWRlZmF1bHQ6CisJCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJCQlyZXR1cm4gKDApOwkJCS8qID0+IG5vIG9yIHVua25vd24gZmxhc2ggKi8KKworCX0KKworCWZsYXNoX2dldF9vZmZzZXRzICgodWxvbmcpYWRkciwgJmZsYXNoX2luZm9bMF0pOworCisJLyogY2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzICovCisJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQorCXsKKwkJLyogcmVhZCBzZWN0b3IgcHJvdGVjdGlvbiBhdCBzZWN0b3IgYWRkcmVzcywgKEE3IC4uIEEwKSA9IDB4MDIgKi8KKwkJLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLworCQljYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGluZm8tPnN0YXJ0W2ldKTsKKwkJaW5mby0+cHJvdGVjdFtpXSA9IGNhZGRyWzJdICYgMTsKKwl9CisKKwkvKgorCSAqIFByZXZlbnQgd3JpdGVzIHRvIHVuaW5pdGlhbGl6ZWQgRkxBU0guCisJICovCisJaWYgKGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX1VOS05PV04pCisJeworCQljYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopaW5mby0+c3RhcnRbMF07CisJCSpjYWRkciA9IDB4RjA7CS8qIHJlc2V0IGJhbmsgKi8KKwl9CisKKwlyZXR1cm4gKGluZm8tPnNpemUpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitpbnQJZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGluZm8tPnN0YXJ0WzBdKTsKKwlpbnQgZmxhZywgcHJvdCwgc2VjdCwgbF9zZWN0OworCXVsb25nIHN0YXJ0LCBub3csIGxhc3Q7CisKKwlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKKwkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJCXByaW50ZiAoIi0gbWlzc2luZ1xuIik7CisJCX0gZWxzZSB7CisJCQlwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOworCQl9CisJCXJldHVybiAxOworCX0KKworCWlmICgoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgfHwKKwkgICAgKGluZm8tPmZsYXNoX2lkID4gRkxBU0hfQU1EX0NPTVApKSB7CisJCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcm90ID0gMDsKKwlmb3IgKHNlY3Q9c19maXJzdDsgc2VjdDw9c19sYXN0OyArK3NlY3QpIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKKwkJCXByb3QrKzsKKwkJfQorCX0KKworCWlmIChwcm90KSB7CisJCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKKwkJCXByb3QpOworCX0gZWxzZSB7CisJCXByaW50ZiAoIlxuIik7CisJfQorCisJbF9zZWN0ID0gLTE7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKwlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwlhZGRyWzB4MDU1NV0gPSAweEFBOworCWFkZHJbMHgwMkFBXSA9IDB4NTU7CisJYWRkclsweDA1NTVdID0gMHg4MDsKKwlhZGRyWzB4MDU1NV0gPSAweEFBOworCWFkZHJbMHgwMkFBXSA9IDB4NTU7CisKKwkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdDw9c19sYXN0OyBzZWN0KyspIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCisJCQlhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoaW5mby0+c3RhcnRbc2VjdF0pOworCQkJYWRkclswXSA9IDB4MzA7CisJCQlsX3NlY3QgPSBzZWN0OworCQl9CisJfQorCisJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGZsYWcpCisJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkvKiB3YWl0IGF0IGxlYXN0IDgwdXMgLSBsZXQncyB3YWl0IDEgbXMgKi8KKwl1ZGVsYXkgKDEwMDApOworCisJLyoKKwkgKiBXZSB3YWl0IGZvciB0aGUgbGFzdCB0cmlnZ2VyZWQgc2VjdG9yCisJICovCisJaWYgKGxfc2VjdCA8IDApCisJCWdvdG8gRE9ORTsKKworCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwlsYXN0ICA9IHN0YXJ0OworCWFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShpbmZvLT5zdGFydFtsX3NlY3RdKTsKKworCXdoaWxlICgoYWRkclswXSAmIDB4RkYpICE9IDB4RkYpCisJeworCQlpZiAoKG5vdyA9IGdldF90aW1lcihzdGFydCkpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKKwkJCXByaW50ZiAoIlRpbWVvdXRcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KKwkJaWYgKChub3cgLSBsYXN0KSA+IDEwMDApIHsJLyogZXZlcnkgc2Vjb25kICovCisJCQlwdXRjICgnLicpOworCQkJbGFzdCA9IG5vdzsKKwkJfQorCX0KKworRE9ORToKKwkvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKwlhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilpbmZvLT5zdGFydFswXTsKKworCWFkZHJbMF0gPSAweEYwOwkvKiByZXNldCBiYW5rICovCisKKwlwcmludGYgKCIgZG9uZVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgorICogMCAtIE9LCisgKiAxIC0gd3JpdGUgdGltZW91dAorICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKKyAqLworCitpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCit7CisJdWxvbmcgY3AsIHdwLCBkYXRhOworCWludCBpLCBsLCByYzsKKworCXdwID0gKGFkZHIgJiB+Myk7CS8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLworCisJLyoKKwkgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCisJICovCisJaWYgKChsID0gYWRkciAtIHdwKSAhPSAwKSB7CisJCWRhdGEgPSAwOworCQlmb3IgKGk9MCwgY3A9d3A7IGk8bDsgKytpLCArK2NwKSB7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwkJfQorCQlmb3IgKDsgaTw0ICYmIGNudD4wOyArK2kpIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJCS0tY250OworCQkJKytjcDsKKwkJfQorCQlmb3IgKDsgY250PT0wICYmIGk8NDsgKytpLCArK2NwKSB7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwkJfQorCisJCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgeworCQkJcmV0dXJuIChyYyk7CisJCX0KKwkJd3AgKz0gNDsKKwl9CisKKwkvKgorCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAorCSAqLworCXdoaWxlIChjbnQgPj0gNCkgeworCQlkYXRhID0gMDsKKwkJZm9yIChpPTA7IGk8NDsgKytpKSB7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJCX0KKwkJaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CisJCQlyZXR1cm4gKHJjKTsKKwkJfQorCQl3cCAgKz0gNDsKKwkJY250IC09IDQ7CisJfQorCisJaWYgKGNudCA9PSAwKSB7CisJCXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKKwkgKi8KKwlkYXRhID0gMDsKKwlmb3IgKGk9MCwgY3A9d3A7IGk8NCAmJiBjbnQ+MDsgKytpLCArK2NwKSB7CisJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJLS1jbnQ7CisJfQorCWZvciAoOyBpPDQ7ICsraSwgKytjcCkgeworCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwl9CisKKwlyZXR1cm4gKHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV3JpdGUgYSB3b3JkIHRvIEZsYXNoLCByZXR1cm5zOgorICogMCAtIE9LCisgKiAxIC0gd3JpdGUgdGltZW91dAorICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKKyAqLworc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikoaW5mby0+c3RhcnRbMF0pLAorCQkJCSpjZGVzdCwqY2RhdGE7CisJdWxvbmcgc3RhcnQ7CisJaW50IGZsYWcsIGNvdW50ID0gNCA7CisKKwljZGVzdCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopZGVzdCA7CisJY2RhdGEgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSZkYXRhIDsKKworCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLworCWlmICgoKigodnVfbG9uZyAqKWRlc3QpICYgZGF0YSkgIT0gZGF0YSkgeworCQlyZXR1cm4gKDIpOworCX0KKworCXdoaWxlKGNvdW50LS0pCisJeworCSAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKwkgICAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisJICAgIGFkZHJbMHgwNTU1XSA9IDB4QUE7CisJICAgIGFkZHJbMHgwMkFBXSA9IDB4NTU7CisJICAgIGFkZHJbMHgwNTU1XSA9IDB4QTA7CisKKwkgICAgKmNkZXN0ID0gKmNkYXRhOworCisJICAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworCSAgICBpZiAoZmxhZykKKwkgICAgCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkgICAgLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLworCSAgICBzdGFydCA9IGdldF90aW1lciAoMCk7CisJICAgIHdoaWxlICgoKmNkZXN0IF4gKmNkYXRhKSAmIDB4ODApCisJICAgIHsKKwkJaWYgKGdldF90aW1lcihzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgeworCQkJcmV0dXJuICgxKTsKKwkJfQorCSAgICB9CisKKwkgICAgY2RhdGErKyA7CisJICAgIGNkZXN0KysgOworCX0KKwlyZXR1cm4gKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3JiYzgyMy9rYmQuYyBiL2JvYXJkL3JiYzgyMy9rYmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTQyNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvcmJjODIzL2tiZC5jCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAwCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qIE1vZGlmaWVkIGJ5IFVkaSBGaW5rZWxzdGVpbgorICoKKyAqIFRoaXMgZmlsZSBpbmNsdWRlcyBjb21tdW5pY2F0aW9uIHJvdXRpbmVzIGZvciBTTUMxIHRoYXQgY2FuIHJ1biBldmVuIGlmCisgKiBTTUMyIGhhdmUgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDx3YXRjaGRvZy5oPgorI2luY2x1ZGUgPGNvbW1wcm9jLmg+CisjaW5jbHVkZSA8ZGV2aWNlcy5oPgorI2luY2x1ZGUgPGxjZC5oPgorCisjZGVmaW5lCVNNQ19JTkRFWAkwCisjZGVmaW5lIFBST0ZGX1NNQwlQUk9GRl9TTUMxCisjZGVmaW5lIENQTV9DUl9DSF9TTUMJQ1BNX0NSX0NIX1NNQzEKKworI2RlZmluZSBSQkM4MjNfS0JEX0JBVURSQVRFCTM4NDAwCisjZGVmaW5lIENQTV9LRVlCT0FSRF9CQVNFCTB4MTAwMAorLyoKKyAqIE1pbmltYWwgc2VyaWFsIGZ1bmN0aW9ucyBuZWVkZWQgdG8gdXNlIG9uZSBvZiB0aGUgU01DIHBvcnRzCisgKiBhcyBzZXJpYWwgY29uc29sZSBpbnRlcmZhY2UuCisgKi8KKwordm9pZCBzbWMxX3NldGJyZyAodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworICAgICAgICB2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gJihpbS0+aW1fY3BtKTsKKworCS8qIFNldCB1cCB0aGUgYmF1ZCByYXRlIGdlbmVyYXRvci4KKwkgKiBTZWUgOHh4X2lvL2NvbW1wcm9jLmMgZm9yIGRldGFpbHMuCisJICoKKwkgKiBXaXJlIEJSRzIgdG8gU01DMSwgQlJHMSB0byBTTUMyCisJICovCisKKwljcC0+Y3Bfc2ltb2RlID0gMHgwMDAwMTAwMDsKKworCWNwLT5jcF9icmdjMiA9CisJCSgoKGdkLT5jcHVfY2xrIC8gMTYgLyBSQkM4MjNfS0JEX0JBVURSQVRFKS0xKSA8PCAxKSB8IENQTV9CUkdfRU47Cit9CisKK2ludCBzbWMxX2luaXQgKHZvaWQpCit7CisgICAgICAgIHZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBzbWNfdCAqc3A7CisJdm9sYXRpbGUgc21jX3VhcnRfdCAqdXA7CisJdm9sYXRpbGUgY2JkX3QgKnRiZGYsICpyYmRmOworCXZvbGF0aWxlIGNwbTh4eF90ICpjcCA9ICYoaW0tPmltX2NwbSk7CisJdWludAlkcGFkZHI7CisKKwkvKiBpbml0aWFsaXplIHBvaW50ZXJzIHRvIFNNQyAqLworCisJc3AgPSAoc21jX3QgKikgJihjcC0+Y3Bfc21jW1NNQ19JTkRFWF0pOworCXVwID0gKHNtY191YXJ0X3QgKikgJmNwLT5jcF9kcGFyYW1bUFJPRkZfU01DXTsKKworCS8qIERpc2FibGUgdHJhbnNtaXR0ZXIvcmVjZWl2ZXIuCisJKi8KKwlzcC0+c21jX3NtY21yICY9IH4oU01DTVJfUkVOIHwgU01DTVJfVEVOKTsKKworCS8qIEVuYWJsZSBTRE1BLgorCSovCisJaW0tPmltX3NpdV9jb25mLnNjX3NkY3IgPSAxOworCisJLyogY2xlYXIgZXJyb3IgY29uZGl0aW9ucyAqLworI2lmZGVmCUNGR19TRFNSCisJaW0tPmltX3NkbWEuc2RtYV9zZHNyID0gQ0ZHX1NEU1I7CisjZWxzZQorCWltLT5pbV9zZG1hLnNkbWFfc2RzciA9IDB4ODM7CisjZW5kaWYKKworCS8qIGNsZWFyIFNETUEgaW50ZXJydXB0IG1hc2sgKi8KKyNpZmRlZglDRkdfU0RNUgorCWltLT5pbV9zZG1hLnNkbWFfc2RtciA9IENGR19TRE1SOworI2Vsc2UKKwlpbS0+aW1fc2RtYS5zZG1hX3NkbXIgPSAweDAwOworI2VuZGlmCisKKwkvKiBVc2UgUG9ydCBCIGZvciBTTUMxIGluc3RlYWQgb2Ygb3RoZXIgZnVuY3Rpb25zLgorCSovCisJY3AtPmNwX3BicGFyIHw9ICAweDAwMDAwMGMwOworCWNwLT5jcF9wYmRpciAmPSB+MHgwMDAwMDBjMDsKKwljcC0+Y3BfcGJvZHIgJj0gfjB4MDAwMDAwYzA7CisKKwkvKiBTZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlcnMgaW4KKwkgKiB0aGUgYnVmZmVyIGRlc2NyaXB0b3JzLgorCSAqLworCisjaWZkZWYgQ0ZHX0FMTE9DX0RQUkFNCisJZHBhZGRyID0gZHByYW1fYWxsb2NfYWxpZ24gKHNpemVvZihjYmRfdCkqMiArIDIsIDgpIDsKKyNlbHNlCisJZHBhZGRyID0gQ1BNX0tFWUJPQVJEX0JBU0UgOworI2VuZGlmCisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdHdvIGJ1ZmZlciBkZXNjcmlwdG9ycyBpbiB0aGUgRFAgcmFtLgorCSAqIEZvciBub3csIHRoaXMgYWRkcmVzcyBzZWVtcyBPSywgYnV0IGl0IG1heSBoYXZlIHRvCisJICogY2hhbmdlIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIGZpcm13YXJlLgorCSAqIGRhbW06IGFsbG9jYXRpbmcgc3BhY2UgYWZ0ZXIgdGhlIHR3byBidWZmZXJzIGZvciByeC90eCBkYXRhCisJICovCisKKwlyYmRmID0gKGNiZF90ICopJmNwLT5jcF9kcG1lbVtkcGFkZHJdOworCXJiZGYtPmNiZF9idWZhZGRyID0gKHVpbnQpIChyYmRmKzIpOworCXJiZGYtPmNiZF9zYyA9IDA7CisJdGJkZiA9IHJiZGYgKyAxOworCXRiZGYtPmNiZF9idWZhZGRyID0gKCh1aW50KSAocmJkZisyKSkgKyAxOworCXRiZGYtPmNiZF9zYyA9IDA7CisKKwkvKiBTZXQgdXAgdGhlIHVhcnQgcGFyYW1ldGVycyBpbiB0aGUgcGFyYW1ldGVyIHJhbS4KKwkqLworCXVwLT5zbWNfcmJhc2UgPSBkcGFkZHI7CisJdXAtPnNtY190YmFzZSA9IGRwYWRkcitzaXplb2YoY2JkX3QpOworCXVwLT5zbWNfcmZjciA9IFNNQ19FQjsKKwl1cC0+c21jX3RmY3IgPSBTTUNfRUI7CisKKwkvKiBTZXQgVUFSVCBtb2RlLCA4IGJpdCwgbm8gcGFyaXR5LCBvbmUgc3RvcC4KKwkgKiBFbmFibGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQuCisJICovCisJc3AtPnNtY19zbWNtciA9IHNtY3JfbWtfY2xlbig5KSB8ICBTTUNNUl9TTV9VQVJUOworCisJLyogTWFzayBhbGwgaW50ZXJydXB0cyBhbmQgcmVtb3ZlIGFueXRoaW5nIHBlbmRpbmcuCisJKi8KKwlzcC0+c21jX3NtY20gPSAwOworCXNwLT5zbWNfc21jZSA9IDB4ZmY7CisKKwkvKiBTZXQgdXAgdGhlIGJhdWQgcmF0ZSBnZW5lcmF0b3IuCisJKi8KKwlzbWMxX3NldGJyZyAoKTsKKworCS8qIE1ha2UgdGhlIGZpcnN0IGJ1ZmZlciB0aGUgb25seSBidWZmZXIuCisJKi8KKwl0YmRmLT5jYmRfc2MgfD0gQkRfU0NfV1JBUDsKKwlyYmRmLT5jYmRfc2MgfD0gQkRfU0NfRU1QVFkgfCBCRF9TQ19XUkFQOworCisJLyogU2luZ2xlIGNoYXJhY3RlciByZWNlaXZlLgorCSovCisJdXAtPnNtY19tcmJsciA9IDE7CisJdXAtPnNtY19tYXhpZGwgPSAwOworCisJLyogSW5pdGlhbGl6ZSBUeC9SeCBwYXJhbWV0ZXJzLgorCSovCisKKwl3aGlsZSAoY3AtPmNwX2NwY3IgJiBDUE1fQ1JfRkxHKSAgLyogd2FpdCBpZiBjcCBpcyBidXN5ICovCisJICA7CisKKwljcC0+Y3BfY3BjciA9IG1rX2NyX2NtZChDUE1fQ1JfQ0hfU01DLCBDUE1fQ1JfSU5JVF9UUlgpIHwgQ1BNX0NSX0ZMRzsKKworCXdoaWxlIChjcC0+Y3BfY3BjciAmIENQTV9DUl9GTEcpICAvKiB3YWl0IGlmIGNwIGlzIGJ1c3kgKi8KKwkgIDsKKworCS8qIEVuYWJsZSB0cmFuc21pdHRlci9yZWNlaXZlci4KKwkqLworCXNwLT5zbWNfc21jbXIgfD0gU01DTVJfUkVOIHwgU01DTVJfVEVOOworCisJcmV0dXJuICgwKTsKK30KKwordm9pZCBzbWMxX3B1dGMoY29uc3QgY2hhciBjKQoreworCXZvbGF0aWxlIGNiZF90CQkqdGJkZjsKKwl2b2xhdGlsZSBjaGFyCQkqYnVmOworCXZvbGF0aWxlIHNtY191YXJ0X3QJKnVwOworICAgICAgICB2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY3BtOHh4X3QJKmNwbXAgPSAmKGltLT5pbV9jcG0pOworCisJdXAgPSAoc21jX3VhcnRfdCAqKSZjcG1wLT5jcF9kcGFyYW1bUFJPRkZfU01DXTsKKworCXRiZGYgPSAoY2JkX3QgKikmY3BtcC0+Y3BfZHBtZW1bdXAtPnNtY190YmFzZV07CisKKwkvKiBXYWl0IGZvciBsYXN0IGNoYXJhY3RlciB0byBnby4KKwkqLworCisJYnVmID0gKGNoYXIgKil0YmRmLT5jYmRfYnVmYWRkcjsKKworCSpidWYgPSBjOworCXRiZGYtPmNiZF9kYXRsZW4gPSAxOworCXRiZGYtPmNiZF9zYyB8PSBCRF9TQ19SRUFEWTsKKwlfX2FzbV9fKCJlaWVpbyIpOworCisJd2hpbGUgKHRiZGYtPmNiZF9zYyAmIEJEX1NDX1JFQURZKSB7CisJCVdBVENIRE9HX1JFU0VUICgpOworCQlfX2FzbV9fKCJlaWVpbyIpOworCX0KK30KKworaW50IHNtYzFfZ2V0Yyh2b2lkKQoreworCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpidWY7CisJdm9sYXRpbGUgc21jX3VhcnRfdAkqdXA7CisgICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBjcG04eHhfdAkqY3BtcCA9ICYoaW0tPmltX2NwbSk7CisJdW5zaWduZWQgY2hhcgkJYzsKKworCXVwID0gKHNtY191YXJ0X3QgKikmY3BtcC0+Y3BfZHBhcmFtW1BST0ZGX1NNQ107CisKKwlyYmRmID0gKGNiZF90ICopJmNwbXAtPmNwX2RwbWVtW3VwLT5zbWNfcmJhc2VdOworCisJLyogV2FpdCBmb3IgY2hhcmFjdGVyIHRvIHNob3cgdXAuCisJKi8KKwlidWYgPSAodW5zaWduZWQgY2hhciAqKXJiZGYtPmNiZF9idWZhZGRyOworCisJd2hpbGUgKHJiZGYtPmNiZF9zYyAmIEJEX1NDX0VNUFRZKQorCQlXQVRDSERPR19SRVNFVCAoKTsKKworCWMgPSAqYnVmOworCXJiZGYtPmNiZF9zYyB8PSBCRF9TQ19FTVBUWTsKKworCXJldHVybihjKTsKK30KKworaW50IHNtYzFfdHN0Yyh2b2lkKQoreworCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKKwl2b2xhdGlsZSBzbWNfdWFydF90CSp1cDsKKyAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGNwbTh4eF90CSpjcG1wID0gJihpbS0+aW1fY3BtKTsKKworCXVwID0gKHNtY191YXJ0X3QgKikmY3BtcC0+Y3BfZHBhcmFtW1BST0ZGX1NNQ107CisKKwlyYmRmID0gKGNiZF90ICopJmNwbXAtPmNwX2RwbWVtW3VwLT5zbWNfcmJhc2VdOworCisJcmV0dXJuKCEocmJkZi0+Y2JkX3NjICYgQkRfU0NfRU1QVFkpKTsKK30KKworLyogc2VhcmNoIGZvciBrZXlib2FyZCBhbmQgcmVnaXN0ZXIgaXQgaWYgZm91bmQgKi8KK2ludCBkcnZfa2V5Ym9hcmRfaW5pdCh2b2lkKQoreworCWludCBlcnJvciA9IDA7CisJZGV2aWNlX3Qga2JkX2RldjsKKworCWlmICgwKSB7CisJCS8qIHJlZ2lzdGVyIHRoZSBrZXlib2FyZCAqLworCQltZW1zZXQgKCZrYmRfZGV2LCAwLCBzaXplb2YoZGV2aWNlX3QpKTsKKwkJc3RyY3B5KGtiZF9kZXYubmFtZSwgImtiZCIpOworCQlrYmRfZGV2LmZsYWdzID0gIERFVl9GTEFHU19JTlBVVCB8IERFVl9GTEFHU19TWVNURU07CisJCWtiZF9kZXYucHV0YyA9IE5VTEw7CisJCWtiZF9kZXYucHV0cyA9IE5VTEw7CisJCWtiZF9kZXYuZ2V0YyA9IHNtYzFfZ2V0YzsKKwkJa2JkX2Rldi50c3RjID0gc21jMV90c3RjOworCQllcnJvciA9IGRldmljZV9yZWdpc3RlciAoJmtiZF9kZXYpOworCX0gZWxzZSB7CisJCWxjZF9pc19lbmFibGVkID0gMDsKKwkJbGNkX2Rpc2FibGUoKTsKKwl9CisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvcmJjODIzL3JiYzgyMy5jIGIvYm9hcmQvcmJjODIzL3JiYzgyMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZWQ1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9yYmM4MjMvcmJjODIzLmMKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgIm1wYzh4eC5oIgorI2luY2x1ZGUgPGxpbnV4L210ZC9kb2MyMDAwLmg+CisKK2V4dGVybiBpbnQga2JkX2luaXQodm9pZCk7CitleHRlcm4gaW50IGRydl9rYmRfaW5pdCh2b2lkKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgbG9uZyBpbnQgZHJhbV9zaXplIChsb25nIGludCwgbG9uZyBpbnQgKiwgbG9uZyBpbnQpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUJX05PVF9VU0VEXwkweEZGRkZGRkZGCisKK2NvbnN0IHVpbnQgc2RyYW1fdGFibGVbXSA9Cit7CisJLyoKKwkgKiBTaW5nbGUgUmVhZC4gKE9mZnNldCAwIGluIFVQTUEgUkFNKQorCSAqLworCTB4MUYwN0ZDMDQsIDB4RUVBRUZDMDQsIDB4MTFBREZDMDQsIDB4RUZCQkJDMDAsCisJMHgxRkY3N0M0NywgLyogbGFzdCAqLworCS8qCisJICogU0RSQU0gSW5pdGlhbGl6YXRpb24gKG9mZnNldCA1IGluIFVQTUEgUkFNKQorCSAqCisJICogVGhpcyBpcyBubyBVUE0gZW50cnkgcG9pbnQuIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiB1c2VzCisJICogdGhlIHJlbWFpbmluZyBzcGFjZSB0byBlc3RhYmxpc2ggYW4gaW5pdGlhbGl6YXRpb24KKwkgKiBzZXF1ZW5jZSwgd2hpY2ggaXMgZXhlY3V0ZWQgYnkgYSBSVU4gY29tbWFuZC4KKwkgKgorCSAqLworCQkgICAgMHgxRkY3N0MzNCwgMHhFRkVBQkMzNCwgMHgxRkI1N0MzNSwgLyogbGFzdCAqLworCS8qCisJICogQnVyc3QgUmVhZC4gKE9mZnNldCA4IGluIFVQTUEgUkFNKQorCSAqLworCTB4MUYwN0ZDMDQsIDB4RUVBRUZDMDQsIDB4MTBBREZDMDQsIDB4RjBBRkZDMDAsCisJMHhGMEFGRkMwMCwgMHhGMUFGRkMwMCwgMHhFRkJCQkMwMCwgMHgxRkY3N0M0NywgLyogbGFzdCAqLworCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCisJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwkvKgorCSAqIFNpbmdsZSBXcml0ZS4gKE9mZnNldCAxOCBpbiBVUE1BIFJBTSkKKwkgKi8KKwkweDFGMjdGQzA0LCAweEVFQUVCQzAwLCAweDAxQjkzQzA0LCAweDFGRjc3QzQ3LCAvKiBsYXN0ICovCisJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwkvKgorCSAqIEJ1cnN0IFdyaXRlLiAoT2Zmc2V0IDIwIGluIFVQTUEgUkFNKQorCSAqLworCTB4MUYwN0ZDMDQsIDB4RUVBRUJDMDAsIDB4MTBBRDdDMDAsIDB4RjBBRkZDMDAsCisJMHhGMEFGRkMwMCwgMHhFMUJCQkMwNCwgMHgxRkY3N0M0NywgLyogbGFzdCAqLworCQkJCQkgICAgX05PVF9VU0VEXywKKwlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCisJLyoKKwkgKiBSZWZyZXNoICAoT2Zmc2V0IDMwIGluIFVQTUEgUkFNKQorCSAqLworCTB4MUZGNUZDODQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsCisJMHhGRkZGRkM4NCwgMHhGRkZGRkMwNywgLyogbGFzdCAqLworCQkJCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCisJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwkvKgorCSAqIEV4Y2VwdGlvbi4gKE9mZnNldCAzYyBpbiBVUE1BIFJBTSkKKwkgKi8KKwkweDFGRjdGQzA3LCAvKiBsYXN0ICovCisJCSAgICBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorfTsKKworY29uc3QgdWludCBzdGF0aWNfdGFibGVbXSA9Cit7CisJLyoKKwkgKiBTaW5nbGUgUmVhZC4gKE9mZnNldCAwIGluIFVQTUEgUkFNKQorCSAqLworCTB4MEZGRkZDMDQsIDB4MEZGM0ZDMDQsIDB4MEZGM0NDMDQsIDB4MEZGM0NDMDQsCisJMHgwRkYzRUMwNCwgMHgwRkYzQ0MwMCwgMHgwRkY3RkMwNCwgMHgzRkZGRkMwNCwKKwkweEZGRkZGQzA0LCAweEZGRkZGQzA1LCAvKiBsYXN0ICovCisJICAgICAgICAgICAgICAgICAgICAgICAgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCisJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwkvKgorCSAqIFNpbmdsZSBXcml0ZS4gKE9mZnNldCAxOCBpbiBVUE1BIFJBTSkKKwkgKi8KKwkweDBGRkZGQzA0LCAweDAwRkZGQzA0LCAweDAwRkZGQzA0LCAweDAwRkZGQzA0LAorCTB4MDFGRkZDMDAsIDB4M0ZGRkZDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDUsIC8qIGxhc3QgKi8KKwlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCisJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCisJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBDaGVjayBCb2FyZCBJZGVudGl0eToKKyAqCisgKiBUZXN0IFRRIElEIHN0cmluZyAoVFFNOHh4Li4uKQorICogSWYgcHJlc2VudCwgY2hlY2sgZm9yICJMIiB0eXBlIChubyBzZWNvbmQgRFJBTSBiYW5rKSwKKyAqIG90aGVyd2lzZSAiTCIgdHlwZSBpcyBhc3N1bWVkIGFzIGRlZmF1bHQuCisgKgorICogUmV0dXJuIDEgZm9yICJMIiB0eXBlLCAwIGVsc2UuCisgKi8KKworaW50IGNoZWNrYm9hcmQgKHZvaWQpCit7CisgICAgdW5zaWduZWQgY2hhciAqcyA9IGdldGVudigic2VyaWFsIyIpOworCisgICAgaWYgKCFzIHx8IHN0cm5jbXAocywgIlRRTTgiLCA0KSkgeworCXByaW50ZiAoIiMjIyBObyBIVyBJRCAtIGFzc3VtaW5nIFJCQzgyM1xuIik7CisJcmV0dXJuICgwKTsKKyAgICB9CisKKyAgICBwdXRzKHMpOworICAgIHB1dGMgKCdcbicpOworCisgICAgcmV0dXJuICgwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitsb25nIGludCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCit7CisgICAgdm9sYXRpbGUgaW1tYXBfdCAgICAgKmltbWFwICA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisgICAgdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOworICAgIGxvbmcgaW50IHNpemVfYjAsIHNpemU4LCBzaXplOTsKKworICAgIHVwbWNvbmZpZyhVUE1BLCAodWludCAqKXNkcmFtX3RhYmxlLCBzaXplb2Yoc2RyYW1fdGFibGUpL3NpemVvZih1aW50KSk7CisKKyAgICAvKgorICAgICAqIDEgQmFuayBvZiA2NE1iaXQgeCAyIGRldmljZXMgCisgICAgICovCisgICAgbWVtY3RsLT5tZW1jX21wdHByID0gQ0ZHX01QVFBSXzFCS180SzsKKyAgICBtZW1jdGwtPm1lbWNfbWFyICA9IDB4MDAwMDAwODg7CisKKyAgICAvKgorICAgICAqIE1hcCBjb250cm9sbGVyIFNEUkFNIGJhbmsgMAorICAgICAqLworICAgIG1lbWN0bC0+bWVtY19vcjQgPSBDRkdfT1I0X1BSRUxJTTsKKyAgICBtZW1jdGwtPm1lbWNfYnI0ID0gQ0ZHX0JSNF9QUkVMSU07CisgICAgbWVtY3RsLT5tZW1jX21hbXIgPSBDRkdfTUFNUl84Q09MICYgKH4oTUFNUl9QVEFFKSk7IC8qIG5vIHJlZnJlc2ggeWV0ICovCisgICAgdWRlbGF5KDIwMCk7CisKKyAgICAvKiAKKyAgICAgKiBQZXJmb3JtIFNEUkFNIGluaXRpYWxpenNhdGlvbiBzZXF1ZW5jZSAKKyAgICAgKi8KKyAgICBtZW1jdGwtPm1lbWNfbWNyICA9IDB4ODAwMDgxMDU7CS8qIFNEUkFNIGJhbmsgMCAqLworICAgIHVkZWxheSgxKTsKKyAgICBtZW1jdGwtPm1lbWNfbWFtciA9IChDRkdfTUFNUl84Q09MICYgfihNQU1SX1RMRkFfTVNLKSkgfCBNQU1SX1RMRkFfOFg7CisgICAgdWRlbGF5KDIwMCk7CisgICAgbWVtY3RsLT5tZW1jX21jciAgPSAweDgwMDA4MTMwOwkvKiBTRFJBTSBiYW5rIDAgLSBleGVjdXRlIHR3aWNlICovCisgICAgdWRlbGF5KDEpOworICAgIG1lbWN0bC0+bWVtY19tYW1yID0gKENGR19NQU1SXzhDT0wgJiB+KE1BTVJfVExGQV9NU0spKSB8IE1BTVJfVExGQV80WDsKKyAgICB1ZGVsYXkoMjAwKTsgCisKKyAgICBtZW1jdGwtPm1lbWNfbWFtciB8PSBNQU1SX1BUQUU7CS8qIGVuYWJsZSByZWZyZXNoICovCisgICAgdWRlbGF5ICgxMDAwKTsKKworICAgIC8qCisgICAgICogUHJlbGltaW5hcnkgcHJlc2NhbGVyIGZvciByZWZyZXNoIChkZXBlbmRzIG9uIG51bWJlciBvZgorICAgICAqIGJhbmtzKTogVGhpcyB2YWx1ZSBpcyBzZWxlY3RlZCBmb3IgZm91ciBjeWNsZXMgZXZlcnkgNjIuNCB1cworICAgICAqIHdpdGggdHdvIFNEUkFNIGJhbmtzIG9yIGZvdXIgY3ljbGVzIGV2ZXJ5IDMxLjIgdXMgd2l0aCBvbmUKKyAgICAgKiBiYW5rLiBJdCB3aWxsIGJlIGFkanVzdGVkIGFmdGVyIG1lbW9yeSBzaXppbmcuCisgICAgICovCisgICAgbWVtY3RsLT5tZW1jX21wdHByID0gQ0ZHX01QVFBSXzJCS180SzsgLy8gMTY6IGJ1dCBzaG91bGQgYmU6IENGR19NUFRQUl8xQktfNEsKKworICAgIC8qCisgICAgICogQ2hlY2sgQmFuayAwIE1lbW9yeSBTaXplIGZvciByZS1jb25maWd1cmF0aW9uCisgICAgICoKKyAgICAgKiB0cnkgOCBjb2x1bW4gbW9kZQorICAgICAqLworICAgIHNpemU4ID0gZHJhbV9zaXplIChDRkdfTUFNUl84Q09MLCAodWxvbmcgKilTRFJBTV9CQVNFNF9QUkVMSU0sIFNEUkFNX01BWF9TSVpFKTsKKyAgICB1ZGVsYXkgKDEwMDApOworCisgICAgLyoKKyAgICAgKiB0cnkgOSBjb2x1bW4gbW9kZQorICAgICAqLworICAgIHNpemU5ID0gZHJhbV9zaXplIChDRkdfTUFNUl85Q09MLCAodWxvbmcgKilTRFJBTV9CQVNFNF9QUkVMSU0sIFNEUkFNX01BWF9TSVpFKTsKKworICAgIGlmIChzaXplOCA8IHNpemU5KSB7CQkvKiBsZWF2ZSBjb25maWd1cmF0aW9uIGF0IDkgY29sdW1ucwkqLworCXNpemVfYjAgPSBzaXplOTsKKy8qCWRlYnVnICgiU0RSQU0gQmFuayAwIGluIDkgY29sdW1uIG1vZGU6ICVsZCBNQlxuIiwgc2l6ZSA+PiAyMCk7CSovCisgICAgfSBlbHNlIHsJCQkJLyogYmFjayB0byA4IGNvbHVtbnMJCQkqLworCXNpemVfYjAgPSBzaXplODsKKwltZW1jdGwtPm1lbWNfbWFtciA9IENGR19NQU1SXzhDT0w7CisJdWRlbGF5KDUwMCk7CisvKglkZWJ1ZyAoIlNEUkFNIEJhbmsgMCBpbiA4IGNvbHVtbiBtb2RlOiAlbGQgTUJcbiIsIHNpemUgPj4gMjApOwkqLworICAgIH0KKworICAgIHVkZWxheSAoMTAwMCk7CisKKyAgICAvKgorICAgICAqIEFkanVzdCByZWZyZXNoIHJhdGUgZGVwZW5kaW5nIG9uIFNEUkFNIHR5cGUsIGJvdGggYmFua3MKKyAgICAgKiBGb3IgdHlwZXMgPiAxMjggTUJpdCBsZWF2ZSBpdCBhdCB0aGUgY3VycmVudCAoZmFzdCkgcmF0ZQorICAgICAqLworICAgIGlmICgoc2l6ZV9iMCA8IDB4MDIwMDAwMDApICkgeworCS8qIHJlZHVjZSB0byAxNS42IHVzICg2Mi40IHVzIC8gcXVhZCkgKi8KKwltZW1jdGwtPm1lbWNfbXB0cHIgPSBDRkdfTVBUUFJfMkJLXzRLOworCXVkZWxheSgxMDAwKTsKKyAgICB9CisKKyAgICAvKiBTRFJBTSBCYW5rIDAgaXMgYmlnZ2VyIC0gbWFwIGZpcnN0CSovCisKKyAgICBtZW1jdGwtPm1lbWNfb3I0ID0gKCgtc2l6ZV9iMCkgJiAweEZGRkYwMDAwKSB8IENGR19PUl9USU1JTkdfU0RSQU07CisgICAgbWVtY3RsLT5tZW1jX2JyNCA9IChDRkdfU0RSQU1fQkFTRSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1BIHwgQlJfVjsKKworICAgIHVkZWxheSgxMDAwMCk7CisKKyAgICByZXR1cm4gKHNpemVfYjApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBDaGVjayBtZW1vcnkgcmFuZ2UgZm9yIHZhbGlkIFJBTS4gQSBzaW1wbGUgbWVtb3J5IHRlc3QgZGV0ZXJtaW5lcworICogdGhlIGFjdHVhbGx5IGF2YWlsYWJsZSBSQU0gc2l6ZSBiZXR3ZWVuIGFkZHJlc3NlcyBgYmFzZScgYW5kCisgKiBgYmFzZSArIG1heHNpemUnLiBTb21lIChub3QgYWxsKSBoYXJkd2FyZSBlcnJvcnMgYXJlIGRldGVjdGVkOgorICogLSBzaG9ydCBiZXR3ZWVuIGFkZHJlc3MgbGluZXMKKyAqIC0gc2hvcnQgYmV0d2VlbiBkYXRhIGxpbmVzCisgKi8KKworc3RhdGljIGxvbmcgaW50IGRyYW1fc2l6ZSAobG9uZyBpbnQgbWFtcl92YWx1ZSwgbG9uZyBpbnQgKmJhc2UsIGxvbmcgaW50IG1heHNpemUpCit7CisgICAgdm9sYXRpbGUgaW1tYXBfdCAgICAgKmltbWFwICA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisgICAgdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOworICAgIHZvbGF0aWxlIGxvbmcgaW50CSAqYWRkcjsKKyAgICBsb25nIGludAkJICBjbnQsIHZhbDsKKworICAgIG1lbWN0bC0+bWVtY19tYW1yID0gbWFtcl92YWx1ZTsKKworICAgIGZvciAoY250ID0gbWF4c2l6ZS9zaXplb2YobG9uZykvMjsgY250ID4gMDsgY250ID4+PSAxKSB7CisJYWRkciA9IGJhc2UgKyBjbnQ7CS8qIHBvaW50ZXIgYXJpdGghICovCisKKwkqYWRkciA9IH5jbnQ7CisgICAgfQorCisgICAgLyogd3JpdGUgMCB0byBiYXNlIGFkZHJlc3MgKi8KKyAgICBhZGRyID0gYmFzZTsKKyAgICAqYWRkciA9IDA7CisKKyAgICAvKiBjaGVjayBhdCBiYXNlIGFkZHJlc3MgKi8KKyAgICBpZiAoKHZhbCA9ICphZGRyKSAhPSAwKSB7CisJcmV0dXJuICgwKTsKKyAgICB9CisKKyAgICBmb3IgKGNudCA9IDE7IGNudCA8IG1heHNpemUvc2l6ZW9mKGxvbmcpIDsgY250IDw8PSAxKSB7CisJYWRkciA9IGJhc2UgKyBjbnQ7CS8qIHBvaW50ZXIgYXJpdGghICovCisKKwl2YWwgPSAqYWRkcjsKKworCWlmICh2YWwgIT0gKH5jbnQpKSB7CisJICAgIHJldHVybiAoY250ICogc2l6ZW9mKGxvbmcpKTsKKwl9CisgICAgfQorICAgIHJldHVybiBjbnQgKiBzaXplb2YobG9uZyk7CisgICAgLyogTk9UUkVBQ0hFRCAqLworfQorCit2b2lkIGRvY19pbml0KHZvaWQpCit7CisgICAgdm9sYXRpbGUgaW1tYXBfdCAgICAgKmltbWFwICA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisgICAgdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOworCisgICAgdXBtY29uZmlnKFVQTUIsICh1aW50ICopc3RhdGljX3RhYmxlLCBzaXplb2Yoc3RhdGljX3RhYmxlKS9zaXplb2YodWludCkpOworICAgIG1lbWN0bC0+bWVtY19tYm1yID0gTUFNUl9EU0FfMV9DWUNMOworCisgICAgZG9jX3Byb2JlKEZMQVNIX0JBU0UxX1BSRUxJTSk7Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL3JiYzgyMy91LWJvb3QubGRzIGIvYm9hcmQvcmJjODIzL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlZDcwNAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3JiYzgyMy91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAwCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9BUkNIKHBvd2VycGMpCitTRUFSQ0hfRElSKC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9wb3dlcnBjLWFueS1lbGYvbGliKTsKKy8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/CisgICBfX0RZTkFNSUMgPSAwOyAgICAqLworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSArIFNJWkVPRl9IRUFERVJTOworICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KKyAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9CisgIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9CisgIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9CisgIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KKyAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkgCX0KKyAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQorICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKSAJfQorICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkgCX0KKyAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKSAJfQorICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KKyAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQorICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9CisgIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9CisgIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KKyAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KKyAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9CisgIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KKyAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9CisgIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KKyAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KKyAgLnBsdCA6IHsgKigucGx0KSB9CisgIC50ZXh0ICAgICAgOgorICB7CisgICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLworICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLworCisgICAgY3B1L21wYzh4eC9zdGFydC5vCSgudGV4dCkKKyAgICBjb21tb24vZGxtYWxsb2MubwkoLnRleHQpCisgICAgbGliX3BwYy9wcGNzdHJpbmcubwkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvdnNwcmludGYubwkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvY3JjMzIubwkJKC50ZXh0KQorICAgIGxpYl9nZW5lcmljL3psaWIubwkJKC50ZXh0KQorCisgICAgLiA9IGVudl9vZmZzZXQ7CisgICAgY29tbW9uL2Vudmlyb25tZW50Lm8oLnRleHQpCisKKyAgICAqKC50ZXh0KQorICAgICooLmZpeHVwKQorICAgICooLmdvdDEpCisgIH0KKyAgX2V0ZXh0ID0gLjsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICA6CisgIHsKKyAgICAqKC5yb2RhdGEpCisgICAgKigucm9kYXRhMSkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOworICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CisgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQorICBfX3N0b3BfX19leF90YWJsZSA9IC47CisKKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9iZWdpbiA9IC47CisgIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQorICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KKyAgLiA9IEFMSUdOKDI1Nik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgLmJzcyAgICAgICA6CisgIHsKKyAgICooLnNic3MpICooLnNjb21tb24pCisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgfQorICBfZW5kID0gLiA7CisgIFBST1ZJREUgKGVuZCA9IC4pOworfQorCmRpZmYgLS1naXQgYS9jb21tb24vZGV2aWNlcy5jIGIvY29tbW9uL2RldmljZXMuYwppbmRleCA2MTViMjE3Li4xZjg4ZmQ1IDEwMDY0NAotLS0gYS9jb21tb24vZGV2aWNlcy5jCisrKyBiL2NvbW1vbi9kZXZpY2VzLmMKQEAgLTE4NSw4ICsxODUsOCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPKSB8fCBkZWZpbmVkKENPTkZJR19DRkJfQ09OU09MRSkKIAlkcnZfdmlkZW9faW5pdCAoKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19XTF80UFBNX0tFWUJPQVJECi0JZHJ2X3dsa2JkX2luaXQgKCk7CisjaWZkZWYgQ09ORklHX0tFWUJPQVJECisJZHJ2X2tleWJvYXJkX2luaXQgKCk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTE9HQlVGRkVSCiAJZHJ2X2xvZ2J1ZmZfaW5pdCAoKTsKZGlmZiAtLWdpdCBhL2NwdS83NHh4Xzd4eC9zdGFydC5TIGIvY3B1Lzc0eHhfN3h4L3N0YXJ0LlMKaW5kZXggNGEwZTdhMS4uYTM3ZjkyNCAxMDA2NDQKLS0tIGEvY3B1Lzc0eHhfN3h4L3N0YXJ0LlMKKysrIGIvY3B1Lzc0eHhfN3h4L3N0YXJ0LlMKQEAgLTc1MCw3ICs3NTAsNyBAQAogCWx3eglyNywgR09UKF9zdGFydCkKIAlsd3oJcjgsIEdPVChfZW5kX29mX3ZlY3RvcnMpCiAKLQlybHdpbm0JcjksIHI3LCAwLCAxOCwgMzEJLyogX3N0YXJ0ICYgMHgzRkZGCSovCisJbGkJcjksIDB4MTAwCQkvKiByZXNldCB2ZWN0b3IgYWx3YXlzIGF0IDB4MTAwICovCiAKIAljbXBsdwkwLCByNywgcjgKIAliZ2VscgkJCQkvKiByZXR1cm4gaWYgcjc+PXI4IC0ganVzdCBpbiBjYXNlICovCmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4L3N0YXJ0LlMgYi9jcHUvbXBjNXh4L3N0YXJ0LlMKaW5kZXggNGQ3YzcxNi4uNjk0ZGU3NyAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eC9zdGFydC5TCisrKyBiL2NwdS9tcGM1eHgvc3RhcnQuUwpAQCAtNTU2LDcgKzU1Niw3IEBACiAJbHd6CXI3LCBHT1QoX3N0YXJ0KQogCWx3eglyOCwgR09UKF9lbmRfb2ZfdmVjdG9ycykKIAotCXJsd2lubQlyOSwgcjcsIDAsIDIyLCAzMQkvKiBfc3RhcnQgJiAweDNGRgkqLworCWxpCXI5LCAweDEwMAkJLyogcmVzZXQgdmVjdG9yIGFsd2F5cyBhdCAweDEwMCAqLwogCiAJY21wbHcJMCwgcjcsIHI4CiAJYmdlbHIJCQkJLyogcmV0dXJuIGlmIHI3Pj1yOCAtIGp1c3QgaW4gY2FzZSAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvc3RhcnQuUyBiL2NwdS9tcGM4MjR4L3N0YXJ0LlMKaW5kZXggYzE0NjEyYi4uMDA0ZTNiMyAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvc3RhcnQuUworKysgYi9jcHUvbXBjODI0eC9zdGFydC5TCkBAIC02OTUsNyArNjk1LDcgQEAKIAlsd3oJcjcsIEdPVChfc3RhcnQpCiAJbHd6CXI4LCBHT1QoX2VuZF9vZl92ZWN0b3JzKQogCi0Jcmx3aW5tCXI5LCByNywgMCwgMTgsIDMxCS8qIF9zdGFydCAmIDB4M0ZGRgkqLworCWxpCXI5LCAweDEwMAkJLyogcmVzZXQgdmVjdG9yIGFsd2F5cyBhdCAweDEwMCAqLwogCiAJY21wbHcJMCwgcjcsIHI4CiAJYmdlbHIJCQkJLyogcmV0dXJuIGlmIHI3Pj1yOCAtIGp1c3QgaW4gY2FzZSAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNjAvcGNpLmMgYi9jcHUvbXBjODI2MC9wY2kuYwppbmRleCA2ZDE2YzA0Li4wMTNkNDhhIDEwMDY0NAotLS0gYS9jcHUvbXBjODI2MC9wY2kuYworKysgYi9jcHUvbXBjODI2MC9wY2kuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBDRkdfUENJX01TVFJfTUVNSU9fU0laRSAKLSNkZWZpbmUgUENJX01TVFJfTUVNSU9fU0laRSAweDIwMDAwMDAwICAgICAgICAgIC8qIDUxMk1CICovIAorI2RlZmluZSBQQ0lfTVNUUl9NRU1JT19TSVpFIDB4MTAwMDAwMDAgICAgICAgICAgLyogMjU2IE1CICovIAogI2Vsc2UgCiAjZGVmaW5lIFBDSV9NU1RSX01FTUlPX1NJWkUgQ0ZHX1BDSV9NU1RSX01FTUlPX1NJWkUgCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjYwL3N0YXJ0LlMgYi9jcHUvbXBjODI2MC9zdGFydC5TCmluZGV4IGE1YjhiNWYuLjBlNmI5NjMgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjYwL3N0YXJ0LlMKKysrIGIvY3B1L21wYzgyNjAvc3RhcnQuUwpAQCAtMTAyOCw3ICsxMDI4LDcgQEAKIAlsd3oJcjcsIEdPVChfc3RhcnQpCiAJbHd6CXI4LCBHT1QoX2VuZF9vZl92ZWN0b3JzKQogCi0Jcmx3aW5tCXI5LCByNywgMCwgMTgsIDMxCS8qIF9zdGFydCAmIDB4M0ZGRgkqLworCWxpCXI5LCAweDEwMAkJLyogcmVzZXQgdmVjdG9yIGFsd2F5cyBhdCAweDEwMCAqLwogCiAJY21wbHcJMCwgcjcsIHI4CiAJYmdlbHIJCQkJLyogcmV0dXJuIGlmIHI3Pj1yOCAtIGp1c3QgaW4gY2FzZSAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9NYWtlZmlsZSBiL2NwdS9tcGM4eHgvTWFrZWZpbGUKaW5kZXggYmU2MmNhOC4uOGIwNTcyMSAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9NYWtlZmlsZQorKysgYi9jcHUvbXBjOHh4L01ha2VmaWxlCkBAIC0zMSw3ICszMSw3IEBACiBPQkpTCT0gYmVkYnVnXzg2MC5vIGNvbW1wcm9jLm8gY3B1Lm8gY3B1X2luaXQubwlcCiAJICBmZWMubyBpMmMubyBpbnRlcnJ1cHRzLm8gbGNkLm8gc2NjLm8JCVwKIAkgIHNlcmlhbC5vIHNwZWVkLm8gc3BpLm8gc3RhdHVzX2xlZC5vXAotCSAgdHJhcHMubyB1cGF0Y2gubyB2aWRlby5vIHdsa2JkLm8KKwkgIHRyYXBzLm8gdXBhdGNoLm8gdmlkZW8ubwogCiBhbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvbGNkLmMgYi9jcHUvbXBjOHh4L2xjZC5jCmluZGV4IDBkYjUzNDguLmZhZDM4M2YgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvbGNkLmMKKysrIGIvY3B1L21wYzh4eC9sY2QuYwpAQCAtMzYsNyArMzYsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BPU1QpCiAjaW5jbHVkZSA8cG9zdC5oPgogI2VuZGlmCi0KKyNpbmNsdWRlIDxsY2QuaD4KIAogI2lmZGVmIENPTkZJR19MQ0QKIApAQCAtMTM1LDYgKzEzNSwxOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBDT05GSUdfSElUQUNISV9TUDE5WDAwMV9aMUEKKy8qCisgKiAgSGl0YWNoaSBTUDE5WDAwMS0uIEFjdGl2ZSwgY29sb3IsIHNpbmdsZSBzY2FuLgorICovCitzdGF0aWMgdmlkaW5mb190IHBhbmVsX2luZm8gPSB7CisgICAgNjQwLCA0ODAsIDE1NCwgMTE2LCBDRkdfSElHSCwgQ0ZHX0hJR0gsIENGR19ISUdILCBDRkdfSElHSCwgQ0ZHX0hJR0gsCisgICAgTENEX0NPTE9SOCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMAorCQkvKiB3YmwsIHZwdywgbGNkYWMsIHdiZiAqLworfTsKKyNlbmRpZiAvKiBDT05GSUdfSElUQUNISV9TUDE5WDAwMV9aMUEgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaWZkZWYgQ09ORklHX05FQ19OTDY2NDhBQzMzCiAvKgogICogIE5FQyBOTDY2NDhBQzMzLTE4LiBBY3RpdmUsIGNvbG9yLCBzaW5nbGUgc2Nhbi4KQEAgLTMwNyw3ICszMjAsNyBAQAogc3RhdGljIGludCBsY2RfY29sb3JfZmc7CiBzdGF0aWMgaW50IGxjZF9jb2xvcl9iZzsKIAotc3RhdGljIGNoYXIgbGNkX2lzX2VuYWJsZWQgPSAwOwkJLyogSW5kaWNhdGUgdGhhdCBMQ0QgaXMgZW5hYmxlZAkqLworY2hhciBsY2RfaXNfZW5hYmxlZCA9IDA7CQkvKiBJbmRpY2F0ZSB0aGF0IExDRCBpcyBlbmFibGVkCSovCiAKIC8qCiAgKiBGcmFtZSBidWZmZXIgbWVtb3J5IGluZm9ybWF0aW9uCkBAIC0zOTUsNyArNDA4LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsY2RfcHV0c194eSAodXNob3J0IHgsIHVzaG9ydCB5LCB1Y2hhciAqcyk7CiBzdGF0aWMgaW5saW5lIHZvaWQgbGNkX3B1dGNfeHkgKHVzaG9ydCB4LCB1c2hvcnQgeSwgdWNoYXIgIGMpOwogCitpbnQJbGNkX2luaXQgKHZvaWQgKmxjZGJhc2UpOworCi1zdGF0aWMgaW50CWxjZF9pbml0ICh2b2lkICpsY2RiYXNlKTsKIHN0YXRpYyB2b2lkCWxjZF9jdHJsX2luaXQgKHZvaWQgKmxjZGJhc2UpOwogc3RhdGljIHZvaWQJbGNkX2VuYWJsZSAodm9pZCk7CiBzdGF0aWMgdm9pZCAgICAqbGNkX2xvZ28gKHZvaWQpOwpAQCAtNDEwLDggKzQyNCwxMSBAQAogc3RhdGljIHZvaWQJbGNkX3NldGZnY29sb3IgKGludCBjb2xvcik7CiBzdGF0aWMgdm9pZAlsY2Rfc2V0Ymdjb2xvciAoaW50IGNvbG9yKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1JCQzgyMykKK3ZvaWQJbGNkX2Rpc2FibGUgKHZvaWQpOworI2VuZGlmCisKICNpZmRlZglOT1RfVVNFRF9TT19GQVIKLXN0YXRpYyB2b2lkCWxjZF9kaXNhYmxlICh2b2lkKTsKIHN0YXRpYyB2b2lkCWxjZF9nZXRjb2xyZWcgKHVzaG9ydCByZWdubywKIAkJCQl1c2hvcnQgKnJlZCwgdXNob3J0ICpncmVlbiwgdXNob3J0ICpibHVlKTsKIHN0YXRpYyBpbnQJbGNkX2dldGZnY29sb3IgKHZvaWQpOwpAQCAtNjc1LDcgKzY5Miw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgbGNkX2luaXQgKHZvaWQgKmxjZGJhc2UpCitpbnQgbGNkX2luaXQgKHZvaWQgKmxjZGJhc2UpCiB7CiAJLyogSW5pdGlhbGl6ZSB0aGUgbGNkIGNvbnRyb2xsZXIgKi8KIAlkZWJ1ZyAoIltMQ0RdIEluaXRpYWxpemluZyBMQ0QgZnJhbWJ1ZmZlciBhdCAlcFxuIiwgbGNkYmFzZSk7CkBAIC03NzgsNiArNzk1LDcgQEAKIAl2b2xhdGlsZSBsY2Q4MjNfdCAqbGNkcCA9ICZpbW1yLT5pbV9sY2Q7CiAKIAl1aW50IGxjY3J0bXA7CisJdWludCBsY2hjcl9ocGNfdG1wOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgTENEIGNvbnRyb2wgcmVnaXN0ZXIgYWNjb3JkaW5nIHRvIHRoZSBMQ0QKIAkgKiBwYXJhbWV0ZXJzIGRlZmluZWQuICBXZSBkbyBldmVyeXRoaW5nIGhlcmUgYnV0IGVuYWJsZQpAQCAtODA4LDYgKzgyNiw5IEBACiAKIAkvKiBJbml0aWFsaXplIExDRCBjb250cm9sbGVyIGJ1cyBwcmlvcml0aWVzLgogCSAqLworI2lmZGVmIENPTkZJR19SQkM4MjMKKwlpbW1yLT5pbV9zaXVfY29uZi5zY19zZGNyID0gKGltbXItPmltX3NpdV9jb25mLnNjX3NkY3IgJiB+MHgwZikgfCAxOwkvKiBSQUlEID0gMDEsIExBSUQgPSAwMCAqLworI2Vsc2UKIAlpbW1yLT5pbV9zaXVfY29uZi5zY19zZGNyICY9IH4weDBmOwkvKiBSQUlEID0gTEFJRCA9IDAgKi8KIAogCS8qIHNldCBTSEZUL0NMT0NLIGRpdmlzaW9uIGZhY3RvciA0CkBAIC04MjEsNyArODQyLDIxIEBACiAJaW1tci0+aW1fY2xrcnN0LmNhcl9zY2NyICY9IH4weDFGOwogCWltbXItPmltX2Nsa3JzdC5jYXJfc2NjciB8PSBMQ0RfREY7CS8qIHdhcyA4ICovCiAKKyNlbmRpZiAvKiBDT05GSUdfUkJDODIzICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19SQkM4MjMpCisJLyogRW5hYmxlIExDRCBvbiBwb3J0IEQuCisJICovCisJaW1tci0+aW1faW9wb3J0LmlvcF9wZGRhdCAmPSAweDAzMDA7CisJaW1tci0+aW1faW9wb3J0LmlvcF9wZHBhciB8PSAweDFDRkY7CisJaW1tci0+aW1faW9wb3J0LmlvcF9wZGRpciB8PSAweDFDRkY7CisKLSNpZm5kZWYgQ09ORklHX0VEVDMyRjEwCisJLyogQ29uZmlndXJlIExDRF9PTiwgVkVFX09OLCBDQ0ZMX09OIG9uIHBvcnQgQi4KKwkgKi8KKwlpbW1yLT5pbV9jcG0uY3BfcGJkYXQgJj0gfjB4MDAwMDUwMDE7CisJaW1tci0+aW1fY3BtLmNwX3BicGFyICY9IH4weDAwMDA1MDAxOworCWltbXItPmltX2NwbS5jcF9wYmRpciB8PSAgMHgwMDAwNTAwMTsKKyNlbGlmICFkZWZpbmVkKENPTkZJR19FRFQzMkYxMCkKIAkvKiBFbmFibGUgTENEIG9uIHBvcnQgRC4KIAkgKi8KIAlpbW1yLT5pbV9pb3BvcnQuaW9wX3BkcGFyIHw9IDB4MUZGRjsKQEAgLTg1MCwxOCArODg1LDIyIEBACiAKIAkvKiBNT1JFIEhBQ0tTLi4uVGhpcyBtdXN0IGJlIHVwZGF0ZWQgYWNjb3JkaW5nIHRvIDgyMyBtYW51YWwKIAkgKiBmb3IgZGlmZmVyZW50IHBhbmVscy4KKwkgKiBVZGkgRmlua2Vsc3RlaW4gLSBkb25lIC0gc2VlIGJlbG93OgorCSAqIE5vdGU6IFlvdSBiZXR0ZXIgbm90IHRyeSB1bnN1cHBvcnRlZCBjb21iaW5hdGlvbnMgc3VjaCBhcworCSAqIDQtYml0IHdpZGUgcGFzc2l2ZSBkdWFsIHNjYW4gTENEIGF0IDQvOCBCaXQgY29sb3IuCiAJICovCi0jaWZuZGVmIENPTkZJR19FRFQzMkYxMAotCWxjZHAtPmxjZF9sY2hjciA9IExDSENSX0JPIHwKLQkJCSAgTENEQklUIChMQ0hDUl9BVF9CSVQsIDQpIHwKLQkJCSAgTENEQklUIChMQ0hDUl9IUENfQklULCBwYW5lbF9pbmZvLnZsX2NvbCkgfAotCQkJICBwYW5lbF9pbmZvLnZsX3dibDsKLSNlbHNlCisJbGNoY3JfaHBjX3RtcCA9CisJICAgICAgIAkocGFuZWxfaW5mby52bF9jb2wgKgorCQkgKHBhbmVsX2luZm8udmxfdGZ0ID8gOCA6CisJCQkoKCgyIC0gcGFuZWxfaW5mby52bF9sYncpIDw8IC8qIDQgYml0PTIsIDgtYml0ID0gMSAqLworCQkJIC8qIHVzZSA8PCB0byBtdWx0IGJ5OiBzaW5nbGUgc2NhbiA9IDEsIGR1YWwgc2NhbiA9IDIgKi8KKwkJCSAgcGFuZWxfaW5mby52bF9zcGx0KSAqCisJCQkgKHBhbmVsX2luZm8udmxfYnBpeCB8IDEpKSkpID4+IDM7IC8qIDIvNCBCUFAgPSAxLCA4LzE2IEJQUCA9IDMgKi8KKwogCWxjZHAtPmxjZF9sY2hjciA9IExDSENSX0JPIHwKIAkJCSAgTENEQklUIChMQ0hDUl9BVF9CSVQsIDQpIHwKLQkJCSAgTENEQklUIChMQ0hDUl9IUENfQklULCBwYW5lbF9pbmZvLnZsX2NvbC80KSB8CisJCQkgIExDREJJVCAoTENIQ1JfSFBDX0JJVCwgbGNoY3JfaHBjX3RtcCkgfAogCQkJICBwYW5lbF9pbmZvLnZsX3dibDsKLSNlbmRpZgogCiAJbGNkcC0+bGNkX2xjdmNyID0gTENEQklUIChMQ1ZDUl9WUFdfQklULCBwYW5lbF9pbmZvLnZsX3ZwdykgfAogCQkJICBMQ0RCSVQgKExDVkNSX0xDRF9BQ19CSVQsIHBhbmVsX2luZm8udmxfbGNkYWMpIHwKQEAgLTk3NSwxMyArMTAxNCwxOCBAQAogCXZvbGF0aWxlIGxjZDgyM190ICpsY2RwID0gJmltbXItPmltX2xjZDsKIAogCS8qIEVuYWJsZSB0aGUgTENEIHBhbmVsICovCisjaWZuZGVmIENPTkZJR19SQkM4MjMKIAlpbW1yLT5pbV9zaXVfY29uZi5zY19zZGNyIHw9ICgxIDw8ICgzMSAtIDI1KSk7CQkvKiBMQU0gPSAxICovCisjZW5kaWYKIAlsY2RwLT5sY2RfbGNjciB8PSBMQ0NSX1BPTjsKIAogI2lmZGVmIENPTkZJR19WMzcKIAkvKiBUdXJuIG9uIGRpc3BsYXkgYmFja2xpZ2h0ICovCiAJaW1tci0+aW1fY3BtLmNwX3BicGFyIHw9IDB4MDAwMDgwMDA7CiAJaW1tci0+aW1fY3BtLmNwX3BiZGlyIHw9IDB4MDAwMDgwMDA7CisjZWxpZiBkZWZpbmVkKENPTkZJR19SQkM4MjMpCisJLyogVHVybiBvbiBkaXNwbGF5IGJhY2tsaWdodCAqLworCWltbXItPmltX2NwbS5jcF9wYmRhdCB8PSAweDAwMDA0MDAwOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19MV01PTikKQEAgLTEwMDUsMTIgKzEwNDksMjAgQEAKIAlyMzYwX2kyY19sY2Rfd3JpdGUoMHg0NywgMHhGRik7CiAgICAgfQogI2VuZGlmIC8qIENPTkZJR19SMzYwTVBJICovCisjaWZkZWYgQ09ORklHX1JCQzgyMworCXVkZWxheSgyMDAwMDApOyAvKiB3YWl0IDIwMG1zICovCisJLyogVHVybiBWRUVfT04gZmlyc3QgKi8KKwlpbW1yLT5pbV9jcG0uY3BfcGJkYXQgfD0gMHgwMDAwMDAwMTsKKwl1ZGVsYXkoMjAwMDAwKTsgLyogd2FpdCAyMDBtcyAqLworCS8qIE5vdyB0dXJuIG9uIExDRF9PTiAqLworCWltbXItPmltX2NwbS5jcF9wYmRhdCB8PSAweDAwMDAxMDAwOworI2VuZGlmCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZmRlZglOT1RfVVNFRF9TT19GQVIKLXN0YXRpYyB2b2lkIGxjZF9kaXNhYmxlICh2b2lkKQorI2lmIGRlZmluZWQgKENPTkZJR19SQkM4MjMpCit2b2lkIGxjZF9kaXNhYmxlICh2b2lkKQogewogCXZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKIAl2b2xhdGlsZSBsY2Q4MjNfdCAqbGNkcCA9ICZpbW1yLT5pbV9sY2Q7CkBAIC0xMDMyLDkgKzEwODQsMTQgQEAKICNlbmRpZiAvKiBDT05GSUdfTFdNT04gKi8KIAkvKiBEaXNhYmxlIHRoZSBMQ0QgcGFuZWwgKi8KIAlsY2RwLT5sY2RfbGNjciAmPSB+TENDUl9QT047CisjaWZkZWYgQ09ORklHX1JCQzgyMworCS8qIFR1cm4gb2ZmIGRpc3BsYXkgYmFja2xpZ2h0LCBWRUUgYW5kIExDRF9PTiAqLworCWltbXItPmltX2NwbS5jcF9wYmRhdCAmPSB+MHgwMDAwNTAwMTsKKyNlbHNlCiAJaW1tci0+aW1fc2l1X2NvbmYuc2Nfc2RjciAmPSB+KDEgPDwgKDMxIC0gMjUpKTsJLyogTEFNID0gMCAqLworI2VuZGlmIC8qIENPTkZJR19SQkM4MjMgKi8KIH0KLSNlbmRpZgkvKiBOT1RfVVNFRF9TT19GQVIgKi8KKyNlbmRpZgkvKiBOT1RfVVNFRF9TT19GQVIgfHwgQ09ORklHX1JCQzgyMyAqLwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L3N0YXJ0LlMgYi9jcHUvbXBjOHh4L3N0YXJ0LlMKaW5kZXggYzVkYzVhOS4uM2NjNGVjYiAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9zdGFydC5TCisrKyBiL2NwdS9tcGM4eHgvc3RhcnQuUwpAQCAtNzIzLDcgKzcyMyw3IEBACiAJbHd6CXI3LCBHT1QoX3N0YXJ0KQogCWx3eglyOCwgR09UKF9lbmRfb2ZfdmVjdG9ycykKIAotCXJsd2lubQlyOSwgcjcsIDAsIDIyLCAzMQkvKiBfc3RhcnQgJiAweDNGRgkqLworCWxpCXI5LCAweDEwMAkJLyogcmVzZXQgdmVjdG9yIGFsd2F5cyBhdCAweDEwMCAqLwogCiAJY21wbHcJMCwgcjcsIHI4CiAJYmdlbHIJCQkJLyogcmV0dXJuIGlmIHI3Pj1yOCAtIGp1c3QgaW4gY2FzZSAqLwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9zdGFydC5TIGIvY3B1L3BwYzR4eC9zdGFydC5TCmluZGV4IGNjMjk1NDguLjY3MzZiNzMgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvc3RhcnQuUworKysgYi9jcHUvcHBjNHh4L3N0YXJ0LlMKQEAgLTEzODEsNyArMTM4MSw3IEBACiAJbHd6CXI3LCBHT1QoX3N0YXJ0KQogCWx3eglyOCwgR09UKF9lbmRfb2ZfdmVjdG9ycykKIAotCXJsd2lubQlyOSwgcjcsIDAsIDE4LCAzMQkvKiBfc3RhcnQgJiAweDNGRkYJKi8KKwlsaQlyOSwgMHgxMDAJCS8qIHJlc2V0IHZlY3RvciBhbHdheXMgYXQgMHgxMDAgKi8KIAogCWNtcGx3CTAsIHI3LCByOAogCWJnZWxyCQkJCS8qIHJldHVybiBpZiByNz49cjggLSBqdXN0IGluIGNhc2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDI3N2Q2ZjYuLmMxZmE0MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtMzAsNyArMzAsOCBAQAogT0JKUwk9IDNjNTg5Lm8gNTcwMXJscy5vIGFsaTUxMngubyBhdDkxcm05MjAwX2V0aGVyLm8gXAogCSAgYmNtNTcweC5vIGJjbTU3MHhfYXV0b25lZy5vIGNmYl9jb25zb2xlLm8gXAogCSAgY3M4OTAwLm8gY3Q2OTAwMC5vIGRjMjExNHgubyAgICAgICAgICBcCi0JICBlZXBybzEwMC5vIGk4MDQyLm8gaTgyMzY1Lm8gaW5jYS1pcF9zdy5vIFwKKwkgIGUxMDAwLm8gZWVwcm8xMDAubyBcCisJICBpODA0Mi5vIGk4MjM2NS5vIGluY2EtaXBfc3cubyBcCiAJICBsYW45MWM5Ni5vICAgICAgICAgICAgIG5hdHNlbWkubyBcCiAJICBuczE2NTUwLm8gbnM4MzgyeC5vIG5zODczMDgubyBcCiAJICBwY2kubyBwY2lfYXV0by5vIHBjaV9pbmRpcmVjdC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZTEwMDAuYyBiL2RyaXZlcnMvZTEwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQ1MGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lMTAwMC5jCkBAIC0wLDAgKzEsMjk3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitJbnRlciBQcm8gMTAwMCBmb3IgcHBjYm9vdC9kYXMtdS1ib290CitEcml2ZXJzIGFyZSBwb3J0IGZyb20gSW50ZWwncyBMaW51eCBkcml2ZXIgZTEwMDAtNC4zLjE1CithbmQgZnJvbSBFdGhlcmJvb3QgcHJvIDEwMDAgZHJpdmVyIGJ5IG1yYWtlcyBhdCB2aXZhdG8gZG90IG5ldAordGVzdGVkIG9uIGJvdGggZ2lnIGNvcHBlciBhbmQgZ2lnIGZpYmVyIGJvYXJkcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDAyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIAorICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCAKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIAorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIAorICBtb3JlIGRldGFpbHMuCisgIAorICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSAKKyAgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgIAorICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAgCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIExpbnV4IE5JQ1MgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogIENvcHlyaWdodCAoQykgQXJjaHdheSBEaWdpdGFsIFNvbHV0aW9ucy4KKyAqCisgKiAgd3JpdHRlbiBieSBDaHJzaXRvcGhlciBMaSA8Y2xpIGF0IGFyY3l3YXkgZG90IGNvbT4gb3IgPGNocmlzbCBhdCBnbnVjaGluYSBkb3Qgb3JnPgorICogIDIvOS8yMDAyCisgKgorICogIENvcHlyaWdodCAoQykgTGludXggTmV0d29yeC4KKyAqICBNYXNzaXZlIHVwZ3JhZGUgdG8gd29yayB3aXRoIHRoZSBuZXcgaW50ZWwgZ2lnYWJpdCBOSUNzLgorICogIDxlYmllZGVybWFuIGF0IGxueGkgZG90IGNvbT4KKyAqLworCisjaW5jbHVkZSAiZTEwMDAuaCIKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05FVCkgJiYgZGVmaW5lZChDT05GSUdfTkVUX01VTFRJKSAmJiBcCisJZGVmaW5lZChDT05GSUdfRTEwMDApCisKKyNkZWZpbmUgVE9VVF9MT09QICAgMTAwMDAwCisKKyN1bmRlZgl2aXJ0X3RvX2J1cworI2RlZmluZQl2aXJ0X3RvX2J1cyh4KQkoKHVuc2lnbmVkIGxvbmcpeCkKKyNkZWZpbmUgYnVzX3RvX3BoeXMoZGV2bm8sIGEpCXBjaV9tZW1fdG9fcGh5cyhkZXZubywgYSkKKyNkZWZpbmUgbWRlbGF5KG4pICAgICAgIHVkZWxheSgobikqMTAwMCkKKworI2RlZmluZSBFMTAwMF9ERUZBVUxUX1BCQSAgICAweDAwMDAwMDMwCisKKy8qIE5JQyBzcGVjaWZpYyBzdGF0aWMgdmFyaWFibGVzIGdvIGhlcmUgKi8KKworc3RhdGljIGNoYXIgdHhfcG9vbFsxMjggKyAxNl07CitzdGF0aWMgY2hhciByeF9wb29sWzEyOCArIDE2XTsKK3N0YXRpYyBjaGFyIHBhY2tldFsyMDk2XTsKKworc3RhdGljIHN0cnVjdCBlMTAwMF90eF9kZXNjICp0eF9iYXNlOworc3RhdGljIHN0cnVjdCBlMTAwMF9yeF9kZXNjICpyeF9iYXNlOworCitzdGF0aWMgaW50IHR4X3RhaWw7CitzdGF0aWMgaW50IHJ4X3RhaWwsIHJ4X2xhc3Q7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdXBwb3J0ZWRbXSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU0Mn0sCisJe1BDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NDNHQ19GSUJFUn0sCisJe1BDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NDNHQ19DT1BQRVJ9LAorCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTQ0RUlfQ09QUEVSfSwKKwl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU0NEVJX0ZJQkVSfSwKKwl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU0NEdDX0NPUFBFUn0sCisJe1BDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NDRHQ19MT019LAorCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTQwRU19LAorCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTQ1RU1fQ09QUEVSfSwKKwl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU0NkVCX0NPUFBFUn0sCisJe1BDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NDVFTV9GSUJFUn0sCisJe1BDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NDZFQl9GSUJFUn0sCisJe1BDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NDBFTV9MT019LAorfTsKKworLyogRnVuY3Rpb24gZm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0YXRpYyBpbnQgZTEwMDBfc2V0dXBfbGluayhzdHJ1Y3QgZXRoX2RldmljZSAqbmljKTsKK3N0YXRpYyBpbnQgZTEwMDBfc2V0dXBfZmliZXJfbGluayhzdHJ1Y3QgZXRoX2RldmljZSAqbmljKTsKK3N0YXRpYyBpbnQgZTEwMDBfc2V0dXBfY29wcGVyX2xpbmsoc3RydWN0IGV0aF9kZXZpY2UgKm5pYyk7CitzdGF0aWMgaW50IGUxMDAwX3BoeV9zZXR1cF9hdXRvbmVnKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHZvaWQgZTEwMDBfY29uZmlnX2NvbGxpc2lvbl9kaXN0KHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIGludCBlMTAwMF9jb25maWdfbWFjX3RvX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBpbnQgZTEwMDBfY29uZmlnX2ZjX2FmdGVyX2xpbmtfdXAoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgaW50IGUxMDAwX2NoZWNrX2Zvcl9saW5rKHN0cnVjdCBldGhfZGV2aWNlICpuaWMpOworc3RhdGljIGludCBlMTAwMF93YWl0X2F1dG9uZWcoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgdm9pZCBlMTAwMF9nZXRfc3BlZWRfYW5kX2R1cGxleChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCAqIHNwZWVkLAorCQkJCSAgICAgICB1aW50MTZfdCAqIGR1cGxleCk7CitzdGF0aWMgaW50IGUxMDAwX3JlYWRfcGh5X3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCByZWdfYWRkciwKKwkJCSAgICAgIHVpbnQxNl90ICogcGh5X2RhdGEpOworc3RhdGljIGludCBlMTAwMF93cml0ZV9waHlfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHJlZ19hZGRyLAorCQkJICAgICAgIHVpbnQxNl90IHBoeV9kYXRhKTsKK3N0YXRpYyB2b2lkIGUxMDAwX3BoeV9od19yZXNldChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBpbnQgZTEwMDBfcGh5X3Jlc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIGludCBlMTAwMF9kZXRlY3RfZ2lnX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKKworI2RlZmluZSBFMTAwMF9XUklURV9SRUcoYSwgcmVnLCB2YWx1ZSkgKHdyaXRlbCgodmFsdWUpLCAoKGEpLT5od19hZGRyICsgRTEwMDBfIyNyZWcpKSkKKyNkZWZpbmUgRTEwMDBfUkVBRF9SRUcoYSwgcmVnKSAocmVhZGwoKGEpLT5od19hZGRyICsgRTEwMDBfIyNyZWcpKQorI2RlZmluZSBFMTAwMF9XUklURV9SRUdfQVJSQVkoYSwgcmVnLCBvZmZzZXQsIHZhbHVlKSAoXAorCQkJd3JpdGVsKCh2YWx1ZSksICgoYSktPmh3X2FkZHIgKyBFMTAwMF8jI3JlZyArICgob2Zmc2V0KSA8PCAyKSkpKQorI2RlZmluZSBFMTAwMF9SRUFEX1JFR19BUlJBWShhLCByZWcsIG9mZnNldCkgKCBcCisgICAgICAgIHJlYWRsKChhKS0+aHdfYWRkciArIEUxMDAwXyMjcmVnICsgKChvZmZzZXQpIDw8IDIpKSkKKyNkZWZpbmUgRTEwMDBfV1JJVEVfRkxVU0goYSkge3VpbnQzMl90IHg7IHggPSBFMTAwMF9SRUFEX1JFRyhhLCBTVEFUVVMpO30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFpc2VzIHRoZSBFRVBST00ncyBjbG9jayBpbnB1dC4KKyAqCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICogZWVjZCAtIEVFQ0QncyBjdXJyZW50IHZhbHVlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAorZTEwMDBfcmFpc2VfZWVfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90ICogZWVjZCkKK3sKKwkvKiBSYWlzZSB0aGUgY2xvY2sgaW5wdXQgdG8gdGhlIEVFUFJPTSAoYnkgc2V0dGluZyB0aGUgU0sgYml0KSwgYW5kIHRoZW4KKwkgKiB3YWl0IDUwIG1pY3Jvc2Vjb25kcy4KKwkgKi8KKwkqZWVjZCA9ICplZWNkIHwgRTEwMDBfRUVDRF9TSzsKKwlFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsICplZWNkKTsKKwlFMTAwMF9XUklURV9GTFVTSChodyk7CisJdWRlbGF5KDUwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTG93ZXJzIHRoZSBFRVBST00ncyBjbG9jayBpbnB1dC4KKyAqCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZSAKKyAqIGVlY2QgLSBFRUNEJ3MgY3VycmVudCB2YWx1ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQKK2UxMDAwX2xvd2VyX2VlX2NsayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCAqIGVlY2QpCit7CisJLyogTG93ZXIgdGhlIGNsb2NrIGlucHV0IHRvIHRoZSBFRVBST00gKGJ5IGNsZWFyaW5nIHRoZSBTSyBiaXQpLCBhbmQgdGhlbiAKKwkgKiB3YWl0IDUwIG1pY3Jvc2Vjb25kcy4gCisJICovCisJKmVlY2QgPSAqZWVjZCAmIH5FMTAwMF9FRUNEX1NLOworCUUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgKmVlY2QpOworCUUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKwl1ZGVsYXkoNTApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTaGlmdCBkYXRhIGJpdHMgb3V0IHRvIHRoZSBFRVBST00uCisgKgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqIGRhdGEgLSBkYXRhIHRvIHNlbmQgdG8gdGhlIEVFUFJPTQorICogY291bnQgLSBudW1iZXIgb2YgYml0cyB0byBzaGlmdCBvdXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkCitlMTAwMF9zaGlmdF9vdXRfZWVfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBkYXRhLCB1aW50MTZfdCBjb3VudCkKK3sKKwl1aW50MzJfdCBlZWNkOworCXVpbnQzMl90IG1hc2s7CisKKwkvKiBXZSBuZWVkIHRvIHNoaWZ0ICJjb3VudCIgYml0cyBvdXQgdG8gdGhlIEVFUFJPTS4gU28sIHZhbHVlIGluIHRoZQorCSAqICJkYXRhIiBwYXJhbWV0ZXIgd2lsbCBiZSBzaGlmdGVkIG91dCB0byB0aGUgRUVQUk9NIG9uZSBiaXQgYXQgYSB0aW1lLgorCSAqIEluIG9yZGVyIHRvIGRvIHRoaXMsICJkYXRhIiBtdXN0IGJlIGJyb2tlbiBkb3duIGludG8gYml0cy4gCisJICovCisJbWFzayA9IDB4MDEgPDwgKGNvdW50IC0gMSk7CisJZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKwllZWNkICY9IH4oRTEwMDBfRUVDRF9ETyB8IEUxMDAwX0VFQ0RfREkpOworCWRvIHsKKwkJLyogQSAiMSIgaXMgc2hpZnRlZCBvdXQgdG8gdGhlIEVFUFJPTSBieSBzZXR0aW5nIGJpdCAiREkiIHRvIGEgIjEiLAorCQkgKiBhbmQgdGhlbiByYWlzaW5nIGFuZCB0aGVuIGxvd2VyaW5nIHRoZSBjbG9jayAodGhlIFNLIGJpdCBjb250cm9scworCQkgKiB0aGUgY2xvY2sgaW5wdXQgdG8gdGhlIEVFUFJPTSkuICBBICIwIiBpcyBzaGlmdGVkIG91dCB0byB0aGUgRUVQUk9NCisJCSAqIGJ5IHNldHRpbmcgIkRJIiB0byAiMCIgYW5kIHRoZW4gcmFpc2luZyBhbmQgdGhlbiBsb3dlcmluZyB0aGUgY2xvY2suCisJCSAqLworCQllZWNkICY9IH5FMTAwMF9FRUNEX0RJOworCisJCWlmIChkYXRhICYgbWFzaykKKwkJCWVlY2QgfD0gRTEwMDBfRUVDRF9ESTsKKworCQlFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOworCQlFMTAwMF9XUklURV9GTFVTSChodyk7CisKKwkJdWRlbGF5KDUwKTsKKworCQllMTAwMF9yYWlzZV9lZV9jbGsoaHcsICZlZWNkKTsKKwkJZTEwMDBfbG93ZXJfZWVfY2xrKGh3LCAmZWVjZCk7CisKKwkJbWFzayA9IG1hc2sgPj4gMTsKKworCX0gd2hpbGUgKG1hc2spOworCisJLyogV2UgbGVhdmUgdGhlICJESSIgYml0IHNldCB0byAiMCIgd2hlbiB3ZSBsZWF2ZSB0aGlzIHJvdXRpbmUuICovCisJZWVjZCAmPSB+RTEwMDBfRUVDRF9ESTsKKwlFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTaGlmdCBkYXRhIGJpdHMgaW4gZnJvbSB0aGUgRUVQUk9NCisgKgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1aW50MTZfdAorZTEwMDBfc2hpZnRfaW5fZWVfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXVpbnQzMl90IGVlY2Q7CisJdWludDMyX3QgaTsKKwl1aW50MTZfdCBkYXRhOworCisJLyogSW4gb3JkZXIgdG8gcmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIEVFUFJPTSwgd2UgbmVlZCB0byBzaGlmdCAxNiBiaXRzIAorCSAqIGluIGZyb20gdGhlIEVFUFJPTS4gQml0cyBhcmUgInNoaWZ0ZWQgaW4iIGJ5IHJhaXNpbmcgdGhlIGNsb2NrIGlucHV0IHRvCisJICogdGhlIEVFUFJPTSAoc2V0dGluZyB0aGUgU0sgYml0KSwgYW5kIHRoZW4gcmVhZGluZyB0aGUgdmFsdWUgb2YgdGhlICJETyIKKwkgKiBiaXQuICBEdXJpbmcgdGhpcyAic2hpZnRpbmcgaW4iIHByb2Nlc3MgdGhlICJESSIgYml0IHNob3VsZCBhbHdheXMgYmUgCisJICogY2xlYXIuLgorCSAqLworCisJZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKworCWVlY2QgJj0gfihFMTAwMF9FRUNEX0RPIHwgRTEwMDBfRUVDRF9ESSk7CisJZGF0YSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlkYXRhID0gZGF0YSA8PCAxOworCQllMTAwMF9yYWlzZV9lZV9jbGsoaHcsICZlZWNkKTsKKworCQllZWNkID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVFQ0QpOworCisJCWVlY2QgJj0gfihFMTAwMF9FRUNEX0RJKTsKKwkJaWYgKGVlY2QgJiBFMTAwMF9FRUNEX0RPKQorCQkJZGF0YSB8PSAxOworCisJCWUxMDAwX2xvd2VyX2VlX2NsayhodywgJmVlY2QpOworCX0KKworCXJldHVybiBkYXRhOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcmVwYXJlcyBFRVBST00gZm9yIGFjY2VzcworICoKKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKgorICogTG93ZXJzIEVFUFJPTSBjbG9jay4gQ2xlYXJzIGlucHV0IHBpbi4gU2V0cyB0aGUgY2hpcCBzZWxlY3QgcGluLiBUaGlzIAorICogZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgaXNzdWluZyBhIGNvbW1hbmQgdG8gdGhlIEVFUFJPTS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkCitlMTAwMF9zZXR1cF9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1aW50MzJfdCBlZWNkOworCisJZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKworCS8qIENsZWFyIFNLIGFuZCBESSAqLworCWVlY2QgJj0gfihFMTAwMF9FRUNEX1NLIHwgRTEwMDBfRUVDRF9ESSk7CisJRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKKworCS8qIFNldCBDUyAqLworCWVlY2QgfD0gRTEwMDBfRUVDRF9DUzsKKwlFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZXR1cm5zIEVFUFJPTSB0byBhICJzdGFuZGJ5IiBzdGF0ZQorICogCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQKK2UxMDAwX3N0YW5kYnlfZWVwcm9tKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdWludDMyX3QgZWVjZDsKKworCWVlY2QgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVDRCk7CisKKwkvKiBEZXNlbGN0IEVFUFJPTSAqLworCWVlY2QgJj0gfihFMTAwMF9FRUNEX0NTIHwgRTEwMDBfRUVDRF9TSyk7CisJRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKKwlFMTAwMF9XUklURV9GTFVTSChodyk7CisJdWRlbGF5KDUwKTsKKworCS8qIENsb2NrIGhpZ2ggKi8KKwllZWNkIHw9IEUxMDAwX0VFQ0RfU0s7CisJRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKKwlFMTAwMF9XUklURV9GTFVTSChodyk7CisJdWRlbGF5KDUwKTsKKworCS8qIFNlbGVjdCBFRVBST00gKi8KKwllZWNkIHw9IEUxMDAwX0VFQ0RfQ1M7CisJRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKKwlFMTAwMF9XUklURV9GTFVTSChodyk7CisJdWRlbGF5KDUwKTsKKworCS8qIENsb2NrIGxvdyAqLworCWVlY2QgJj0gfkUxMDAwX0VFQ0RfU0s7CisJRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKKwlFMTAwMF9XUklURV9GTFVTSChodyk7CisJdWRlbGF5KDUwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmVhZHMgYSAxNiBiaXQgd29yZCBmcm9tIHRoZSBFRVBST00uCisgKgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqIG9mZnNldCAtIG9mZnNldCBvZiAgd29yZCBpbiB0aGUgRUVQUk9NIHRvIHJlYWQKKyAqIGRhdGEgLSB3b3JkIHJlYWQgZnJvbSB0aGUgRUVQUk9NIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorZTEwMDBfcmVhZF9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3Qgb2Zmc2V0LCB1aW50MTZfdCAqIGRhdGEpCit7CisJdWludDMyX3QgZWVjZDsKKwl1aW50MzJfdCBpID0gMDsKKwlpbnQgbGFyZ2VfZWVwcm9tID0gRkFMU0U7CisKKwkvKiBSZXF1ZXN0IEVFUFJPTSBBY2Nlc3MgKi8KKwlpZiAoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDQpIHsKKwkJZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKwkJaWYgKGVlY2QgJiBFMTAwMF9FRUNEX1NJWkUpCisJCQlsYXJnZV9lZXByb20gPSBUUlVFOworCQllZWNkIHw9IEUxMDAwX0VFQ0RfUkVROworCQlFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOworCQllZWNkID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVFQ0QpOworCQl3aGlsZSAoKCEoZWVjZCAmIEUxMDAwX0VFQ0RfR05UKSkgJiYgKGkgPCAxMDApKSB7CisJCQlpKys7CisJCQl1ZGVsYXkoMTApOworCQkJZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKwkJfQorCQlpZiAoIShlZWNkICYgRTEwMDBfRUVDRF9HTlQpKSB7CisJCQllZWNkICY9IH5FMTAwMF9FRUNEX1JFUTsKKwkJCUUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7CisJCQlERUJVR09VVCgiQ291bGQgbm90IGFjcXVpcmUgRUVQUk9NIGdyYW50XG4iKTsKKwkJCXJldHVybiAtRTEwMDBfRVJSX0VFUFJPTTsKKwkJfQorCX0KKworCS8qICBQcmVwYXJlIHRoZSBFRVBST00gZm9yIHJlYWRpbmcgICovCisJZTEwMDBfc2V0dXBfZWVwcm9tKGh3KTsKKworCS8qICBTZW5kIHRoZSBSRUFEIGNvbW1hbmQgKG9wY29kZSArIGFkZHIpICAqLworCWUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCBFRVBST01fUkVBRF9PUENPREUsIDMpOworCWUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCBvZmZzZXQsIChsYXJnZV9lZXByb20pID8gOCA6IDYpOworCisJLyogUmVhZCB0aGUgZGF0YSAqLworCSpkYXRhID0gZTEwMDBfc2hpZnRfaW5fZWVfYml0cyhodyk7CisKKwkvKiBFbmQgdGhpcyByZWFkIG9wZXJhdGlvbiAqLworCWUxMDAwX3N0YW5kYnlfZWVwcm9tKGh3KTsKKworCS8qIFN0b3AgcmVxdWVzdGluZyBFRVBST00gYWNjZXNzICovCisJaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ0KSB7CisJCWVlY2QgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVDRCk7CisJCWVlY2QgJj0gfkUxMDAwX0VFQ0RfUkVROworCQlFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOworCX0KKworCXJldHVybiAwOworfQorCisjaWYgMAorc3RhdGljIHZvaWQKK2UxMDAwX2VlcHJvbV9jbGVhbnVwKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdWludDMyX3QgZWVjZDsKKworCWVlY2QgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVDRCk7CisJZWVjZCAmPSB+KEUxMDAwX0VFQ0RfQ1MgfCBFMTAwMF9FRUNEX0RJKTsKKwlFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOworCWUxMDAwX3JhaXNlX2VlX2NsayhodywgJmVlY2QpOworCWUxMDAwX2xvd2VyX2VlX2NsayhodywgJmVlY2QpOworfQorCitzdGF0aWMgdWludDE2X3QKK2UxMDAwX3dhaXRfZWVwcm9tX2RvbmUoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1aW50MzJfdCBlZWNkOworCXVpbnQzMl90IGk7CisKKwllMTAwMF9zdGFuZGJ5X2VlcHJvbShodyk7CisJZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisJCWVlY2QgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVDRCk7CisJCWlmIChlZWNkICYgRTEwMDBfRUVDRF9ETykKKwkJCXJldHVybiAoVFJVRSk7CisJCXVkZWxheSg1KTsKKwl9CisJcmV0dXJuIChGQUxTRSk7Cit9CisKK3N0YXRpYyBpbnQKK2UxMDAwX3dyaXRlX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBSZWcsIHVpbnQxNl90IERhdGEpCit7CisJdWludDMyX3QgZWVjZDsKKwlpbnQgbGFyZ2VfZWVwcm9tID0gRkFMU0U7CisJaW50IGkgPSAwOworCisJLyogUmVxdWVzdCBFRVBST00gQWNjZXNzICovCisJaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ0KSB7CisJCWVlY2QgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVDRCk7CisJCWlmIChlZWNkICYgRTEwMDBfRUVDRF9TSVpFKQorCQkJbGFyZ2VfZWVwcm9tID0gVFJVRTsKKwkJZWVjZCB8PSBFMTAwMF9FRUNEX1JFUTsKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKKwkJZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKwkJd2hpbGUgKCghKGVlY2QgJiBFMTAwMF9FRUNEX0dOVCkpICYmIChpIDwgMTAwKSkgeworCQkJaSsrOworCQkJdWRlbGF5KDUpOworCQkJZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKwkJfQorCQlpZiAoIShlZWNkICYgRTEwMDBfRUVDRF9HTlQpKSB7CisJCQllZWNkICY9IH5FMTAwMF9FRUNEX1JFUTsKKwkJCUUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7CisJCQlERUJVR09VVCgiQ291bGQgbm90IGFjcXVpcmUgRUVQUk9NIGdyYW50XG4iKTsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCX0KKwllMTAwMF9zZXR1cF9lZXByb20oaHcpOworCWUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCBFRVBST01fRVdFTl9PUENPREUsIDUpOworCWUxMDAwX3NoaWZ0X291dF9lZV9iaXRzKGh3LCBSZWcsIChsYXJnZV9lZXByb20pID8gNiA6IDQpOworCWUxMDAwX3N0YW5kYnlfZWVwcm9tKGh3KTsKKwllMTAwMF9zaGlmdF9vdXRfZWVfYml0cyhodywgRUVQUk9NX1dSSVRFX09QQ09ERSwgMyk7CisJZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoaHcsIFJlZywgKGxhcmdlX2VlcHJvbSkgPyA4IDogNik7CisJZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoaHcsIERhdGEsIDE2KTsKKwlpZiAoIWUxMDAwX3dhaXRfZWVwcm9tX2RvbmUoaHcpKSB7CisJCXJldHVybiBGQUxTRTsKKwl9CisJZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoaHcsIEVFUFJPTV9FV0RTX09QQ09ERSwgNSk7CisJZTEwMDBfc2hpZnRfb3V0X2VlX2JpdHMoaHcsIFJlZywgKGxhcmdlX2VlcHJvbSkgPyA2IDogNCk7CisJZTEwMDBfZWVwcm9tX2NsZWFudXAoaHcpOworCisJLyogU3RvcCByZXF1ZXN0aW5nIEVFUFJPTSBhY2Nlc3MgKi8KKwlpZiAoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDQpIHsKKwkJZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKwkJZWVjZCAmPSB+RTEwMDBfRUVDRF9SRVE7CisJCUUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7CisJfQorCWkgPSAwOworCWVlY2QgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVDRCk7CisJd2hpbGUgKCgoZWVjZCAmIEUxMDAwX0VFQ0RfR05UKSkgJiYgKGkgPCA1MDApKSB7CisJCWkrKzsKKwkJdWRlbGF5KDEwKTsKKwkJZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKKwl9CisJaWYgKChlZWNkICYgRTEwMDBfRUVDRF9HTlQpKSB7CisJCURFQlVHT1VUKCJDb3VsZCBub3QgcmVsZWFzZSBFRVBST00gZ3JhbnRcbiIpOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWZXJpZmllcyB0aGF0IHRoZSBFRVBST00gaGFzIGEgdmFsaWQgY2hlY2tzdW0KKyAqIAorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqCisgKiBSZWFkcyB0aGUgZmlyc3QgNjQgMTYgYml0IHdvcmRzIG9mIHRoZSBFRVBST00gYW5kIHN1bXMgdGhlIHZhbHVlcyByZWFkLgorICogSWYgdGhlIHRoZSBzdW0gb2YgdGhlIDY0IDE2IGJpdCB3b3JkcyBpcyAweEJBQkEsIHRoZSBFRVBST00ncyBjaGVja3N1bSBpcworICogdmFsaWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CitlMTAwMF92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oc3RydWN0IGV0aF9kZXZpY2UgKm5pYykKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gbmljLT5wcml2OworCXVpbnQxNl90IGNoZWNrc3VtID0gMDsKKwl1aW50MTZfdCBpLCBlZXByb21fZGF0YTsKKworCURFQlVHRlVOQygpOworCisJZm9yIChpID0gMDsgaSA8IChFRVBST01fQ0hFQ0tTVU1fUkVHICsgMSk7IGkrKykgeworCQlpZiAoZTEwMDBfcmVhZF9lZXByb20oaHcsIGksICZlZXByb21fZGF0YSkgPCAwKSB7CisJCQlERUJVR09VVCgiRUVQUk9NIFJlYWQgRXJyb3JcbiIpOworCQkJcmV0dXJuIC1FMTAwMF9FUlJfRUVQUk9NOworCQl9CisJCWNoZWNrc3VtICs9IGVlcHJvbV9kYXRhOworCX0KKwkKKwlpZiAoY2hlY2tzdW0gPT0gKHVpbnQxNl90KSBFRVBST01fU1VNKSB7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCURFQlVHT1VUKCJFRVBST00gQ2hlY2tzdW0gSW52YWxpZFxuIik7CisJCXJldHVybiAtRTEwMDBfRVJSX0VFUFJPTTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJlYWRzIHRoZSBhZGFwdGVyJ3MgTUFDIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NIGFuZCBpbnZlcnRzIHRoZSBMU0IgZm9yIHRoZQorICogc2Vjb25kIGZ1bmN0aW9uIG9mIGR1YWwgZnVuY3Rpb24gZGV2aWNlcworICoKKyAqIG5pYyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorZTEwMDBfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgZXRoX2RldmljZSAqbmljKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSBuaWMtPnByaXY7CisJdWludDE2X3Qgb2Zmc2V0OworCXVpbnQxNl90IGVlcHJvbV9kYXRhOworCWludCBpOworCisJREVCVUdGVU5DKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTk9ERV9BRERSRVNTX1NJWkU7IGkgKz0gMikgeworCQlvZmZzZXQgPSBpID4+IDE7CisJCWlmIChlMTAwMF9yZWFkX2VlcHJvbShodywgb2Zmc2V0LCAmZWVwcm9tX2RhdGEpIDwgMCkgeworCQkJREVCVUdPVVQoIkVFUFJPTSBSZWFkIEVycm9yXG4iKTsKKwkJCXJldHVybiAtRTEwMDBfRVJSX0VFUFJPTTsKKwkJfQorCQluaWMtPmVuZXRhZGRyW2ldID0gZWVwcm9tX2RhdGEgJiAweGZmOworCQluaWMtPmVuZXRhZGRyW2kgKyAxXSA9IChlZXByb21fZGF0YSA+PiA4KSAmIDB4ZmY7CisJfQorCWlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ2KSAmJgorCSAgICAoRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKSkgeworCQkvKiBJbnZlcnQgdGhlIGxhc3QgYml0IGlmIHRoaXMgaXMgdGhlIHNlY29uZCBkZXZpY2UgKi8KKwkJbmljLT5lbmV0YWRkcls1XSArPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdGlhbGl6ZXMgcmVjZWl2ZSBhZGRyZXNzIGZpbHRlcnMuCisgKgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUgCisgKgorICogUGxhY2VzIHRoZSBNQUMgYWRkcmVzcyBpbiByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXIgMCBhbmQgY2xlYXJzIHRoZSByZXN0CisgKiBvZiB0aGUgcmVjZWl2ZSBhZGRyZXNzcyByZWdpc3RlcnMuIENsZWFycyB0aGUgbXVsdGljYXN0IHRhYmxlLiBBc3N1bWVzCisgKiB0aGUgcmVjZWl2ZXIgaXMgaW4gcmVzZXQgd2hlbiB0aGUgcm91dGluZSBpcyBjYWxsZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAorZTEwMDBfaW5pdF9yeF9hZGRycyhzdHJ1Y3QgZXRoX2RldmljZSAqbmljKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSBuaWMtPnByaXY7CisJdWludDMyX3QgaTsKKwl1aW50MzJfdCBhZGRyX2xvdzsKKwl1aW50MzJfdCBhZGRyX2hpZ2g7CisKKwlERUJVR0ZVTkMoKTsKKworCS8qIFNldHVwIHRoZSByZWNlaXZlIGFkZHJlc3MuICovCisJREVCVUdPVVQoIlByb2dyYW1taW5nIE1BQyBBZGRyZXNzIGludG8gUkFSWzBdXG4iKTsKKwlhZGRyX2xvdyA9IChuaWMtPmVuZXRhZGRyWzBdIHwKKwkJICAgIChuaWMtPmVuZXRhZGRyWzFdIDw8IDgpIHwKKwkJICAgIChuaWMtPmVuZXRhZGRyWzJdIDw8IDE2KSB8IChuaWMtPmVuZXRhZGRyWzNdIDw8IDI0KSk7CisKKwlhZGRyX2hpZ2ggPSAobmljLT5lbmV0YWRkcls0XSB8IChuaWMtPmVuZXRhZGRyWzVdIDw8IDgpIHwgRTEwMDBfUkFIX0FWKTsKKworCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgUkEsIDAsIGFkZHJfbG93KTsKKwlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIFJBLCAxLCBhZGRyX2hpZ2gpOworCisJLyogWmVybyBvdXQgdGhlIG90aGVyIDE1IHJlY2VpdmUgYWRkcmVzc2VzLiAqLworCURFQlVHT1VUKCJDbGVhcmluZyBSQVJbMS0xNV1cbiIpOworCWZvciAoaSA9IDE7IGkgPCBFMTAwMF9SQVJfRU5UUklFUzsgaSsrKSB7CisJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgUkEsIChpIDw8IDEpLCAwKTsKKwkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBSQSwgKChpIDw8IDEpICsgMSksIDApOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ2xlYXJzIHRoZSBWTEFOIGZpbGVyIHRhYmxlCisgKgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkCitlMTAwMF9jbGVhcl92ZnRhKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdWludDMyX3Qgb2Zmc2V0OworCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBFMTAwMF9WTEFOX0ZJTFRFUl9UQkxfU0laRTsgb2Zmc2V0KyspCisJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgVkZUQSwgb2Zmc2V0LCAwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2V0IHRoZSBtYWMgdHlwZSBtZW1iZXIgaW4gdGhlIGh3IHN0cnVjdC4KKyAqIAorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQKK2UxMDAwX3NldF9tYWNfdHlwZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCURFQlVHRlVOQygpOworCisJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDI6CisJCXN3aXRjaCAoaHctPnJldmlzaW9uX2lkKSB7CisJCWNhc2UgRTEwMDBfODI1NDJfMl8wX1JFVl9JRDoKKwkJCWh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQyX3JldjJfMDsKKwkJCWJyZWFrOworCQljYXNlIEUxMDAwXzgyNTQyXzJfMV9SRVZfSUQ6CisJCQlody0+bWFjX3R5cGUgPSBlMTAwMF84MjU0Ml9yZXYyXzE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIEludmFsaWQgODI1NDIgcmV2aXNpb24gSUQgKi8KKwkJCXJldHVybiAtRTEwMDBfRVJSX01BQ19UWVBFOworCQl9CisJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQzR0NfRklCRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDNHQ19DT1BQRVI6CisJCWh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQzOworCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NEVJX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NEVJX0ZJQkVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ0R0NfQ09QUEVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ0R0NfTE9NOgorCQlody0+bWFjX3R5cGUgPSBlMTAwMF84MjU0NDsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDBFTToKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0MEVNX0xPTToKKwkJaHctPm1hY190eXBlID0gZTEwMDBfODI1NDA7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ1RU1fQ09QUEVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ1RU1fRklCRVI6CisJCWh3LT5tYWNfdHlwZSA9IGUxMDAwXzgyNTQ1OworCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkVCX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkVCX0ZJQkVSOgorCQlody0+bWFjX3R5cGUgPSBlMTAwMF84MjU0NjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogU2hvdWxkIG5ldmVyIGhhdmUgbG9hZGVkIG9uIHRoaXMgZGV2aWNlICovCisJCXJldHVybiAtRTEwMDBfRVJSX01BQ19UWVBFOworCX0KKwlyZXR1cm4gRTEwMDBfU1VDQ0VTUzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmVzZXQgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzOyBtYXNrIGFuZCBjbGVhciBhbGwgaW50ZXJydXB0cy4KKyAqCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZAorZTEwMDBfcmVzZXRfaHcoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1aW50MzJfdCBjdHJsOworCXVpbnQzMl90IGN0cmxfZXh0OworCXVpbnQzMl90IGljcjsKKwl1aW50MzJfdCBtYW5jOworCisJREVCVUdGVU5DKCk7CisKKwkvKiBGb3IgODI1NDIgKHJldiAyLjApLCBkaXNhYmxlIE1XSSBiZWZvcmUgaXNzdWluZyBhIGRldmljZSByZXNldCAqLworCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDJfcmV2Ml8wKSB7CisJCURFQlVHT1VUKCJEaXNhYmxpbmcgTVdJIG9uIDgyNTQyIHJldiAyLjBcbiIpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaHctPnBkZXYsIFBDSV9DT01NQU5ELAorCQkJCSAgICAgIGh3LT4KKwkJCQkgICAgICBwY2lfY21kX3dvcmQgJiB+UENJX0NPTU1BTkRfSU5WQUxJREFURSk7CisJfQorCisJLyogQ2xlYXIgaW50ZXJydXB0IG1hc2sgdG8gc3RvcCBib2FyZCBmcm9tIGdlbmVyYXRpbmcgaW50ZXJydXB0cyAqLworCURFQlVHT1VUKCJNYXNraW5nIG9mZiBhbGwgaW50ZXJydXB0c1xuIik7CisJRTEwMDBfV1JJVEVfUkVHKGh3LCBJTUMsIDB4ZmZmZmZmZmYpOworCisJLyogRGlzYWJsZSB0aGUgVHJhbnNtaXQgYW5kIFJlY2VpdmUgdW5pdHMuICBUaGVuIGRlbGF5IHRvIGFsbG93CisJICogYW55IHBlbmRpbmcgdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlIGJlZm9yZSB3ZSBoaXQgdGhlIE1BQyB3aXRoCisJICogdGhlIGdsb2JhbCByZXNldC4KKwkgKi8KKwlFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIDApOworCUUxMDAwX1dSSVRFX1JFRyhodywgVENUTCwgRTEwMDBfVENUTF9QU1ApOworCUUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKworCS8qIFRoZSB0YmlfY29tcGF0aWJpbGl0eV9vbiBGbGFnIG11c3QgYmUgY2xlYXJlZCB3aGVuIFJjdGwgaXMgY2xlYXJlZC4gKi8KKwlody0+dGJpX2NvbXBhdGliaWxpdHlfb24gPSBGQUxTRTsKKworCS8qIERlbGF5IHRvIGFsbG93IGFueSBvdXRzdGFuZGluZyBQQ0kgdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlIGJlZm9yZQorCSAqIHJlc2V0dGluZyB0aGUgZGV2aWNlCisJICovCisJbWRlbGF5KDEwKTsKKworCS8qIElzc3VlIGEgZ2xvYmFsIHJlc2V0IHRvIHRoZSBNQUMuICBUaGlzIHdpbGwgcmVzZXQgdGhlIGNoaXAncworCSAqIHRyYW5zbWl0LCByZWNlaXZlLCBETUEsIGFuZCBsaW5rIHVuaXRzLiAgSXQgd2lsbCBub3QgZWZmZWN0CisJICogdGhlIGN1cnJlbnQgUENJIGNvbmZpZ3VyYXRpb24uICBUaGUgZ2xvYmFsIHJlc2V0IGJpdCBpcyBzZWxmLQorCSAqIGNsZWFyaW5nLCBhbmQgc2hvdWxkIGNsZWFyIHdpdGhpbiBhIG1pY3Jvc2Vjb25kLgorCSAqLworCURFQlVHT1VUKCJJc3N1aW5nIGEgZ2xvYmFsIHJlc2V0IHRvIE1BQ1xuIik7CisJY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKworI2lmIDAKKwlpZiAoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDMpCisJCUUxMDAwX1dSSVRFX1JFR19JTyhodywgQ1RSTCwgKGN0cmwgfCBFMTAwMF9DVFJMX1JTVCkpOworCWVsc2UKKyNlbmRpZgorCQlFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIChjdHJsIHwgRTEwMDBfQ1RSTF9SU1QpKTsKKworCS8qIEZvcmNlIGEgcmVsb2FkIGZyb20gdGhlIEVFUFJPTSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoaHctPm1hY190eXBlIDwgZTEwMDBfODI1NDApIHsKKwkJLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi8KKwkJdWRlbGF5KDEwKTsKKwkJY3RybF9leHQgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTF9FWFQpOworCQljdHJsX2V4dCB8PSBFMTAwMF9DVFJMX0VYVF9FRV9SU1Q7CisJCUUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTF9FWFQsIGN0cmxfZXh0KTsKKwkJRTEwMDBfV1JJVEVfRkxVU0goaHcpOworCQkvKiBXYWl0IGZvciBFRVBST00gcmVsb2FkICovCisJCW1kZWxheSgyKTsKKwl9IGVsc2UgeworCQkvKiBXYWl0IGZvciBFRVBST00gcmVsb2FkIChpdCBoYXBwZW5zIGF1dG9tYXRpY2FsbHkpICovCisJCW1kZWxheSg0KTsKKwkJLyogRGlzc2FibGUgSFcgQVJQcyBvbiBBU0YgZW5hYmxlZCBhZGFwdGVycyAqLworCQltYW5jID0gRTEwMDBfUkVBRF9SRUcoaHcsIE1BTkMpOworCQltYW5jICY9IH4oRTEwMDBfTUFOQ19BUlBfRU4pOworCQlFMTAwMF9XUklURV9SRUcoaHcsIE1BTkMsIG1hbmMpOworCX0KKworCS8qIENsZWFyIGludGVycnVwdCBtYXNrIHRvIHN0b3AgYm9hcmQgZnJvbSBnZW5lcmF0aW5nIGludGVycnVwdHMgKi8KKwlERUJVR09VVCgiTWFza2luZyBvZmYgYWxsIGludGVycnVwdHNcbiIpOworCUUxMDAwX1dSSVRFX1JFRyhodywgSU1DLCAweGZmZmZmZmZmKTsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdCBldmVudHMuICovCisJaWNyID0gRTEwMDBfUkVBRF9SRUcoaHcsIElDUik7CisKKwkvKiBJZiBNV0kgd2FzIHByZXZpb3VzbHkgZW5hYmxlZCwgcmVlbmFibGUgaXQuICovCisJaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0Ml9yZXYyXzApIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lfQ09NTUFORCwgaHctPnBjaV9jbWRfd29yZCk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQZXJmb3JtcyBiYXNpYyBjb25maWd1cmF0aW9uIG9mIHRoZSBhZGFwdGVyLgorICoKKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKiAKKyAqIEFzc3VtZXMgdGhhdCB0aGUgY29udHJvbGxlciBoYXMgcHJldmlvdXNseSBiZWVuIHJlc2V0IGFuZCBpcyBpbiBhIAorICogcG9zdC1yZXNldCB1bmluaXRpYWxpemVkIHN0YXRlLiBJbml0aWFsaXplcyB0aGUgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycywKKyAqIG11bHRpY2FzdCB0YWJsZSwgYW5kIFZMQU4gZmlsdGVyIHRhYmxlLiBDYWxscyByb3V0aW5lcyB0byBzZXR1cCBsaW5rCisgKiBjb25maWd1cmF0aW9uIGFuZCBmbG93IGNvbnRyb2wgc2V0dGluZ3MuIENsZWFycyBhbGwgb24tY2hpcCBjb3VudGVycy4gTGVhdmVzCisgKiB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgdW5pdHMgZGlzYWJsZWQgYW5kIHVuaW5pdGlhbGl6ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CitlMTAwMF9pbml0X2h3KHN0cnVjdCBldGhfZGV2aWNlICpuaWMpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9IG5pYy0+cHJpdjsKKwl1aW50MzJfdCBjdHJsLCBzdGF0dXM7CisJdWludDMyX3QgaTsKKwlpbnQzMl90IHJldF92YWw7CisJdWludDE2X3QgcGNpeF9jbWRfd29yZDsKKwl1aW50MTZfdCBwY2l4X3N0YXRfaGlfd29yZDsKKwl1aW50MTZfdCBjbWRfbW1yYmM7CisJdWludDE2X3Qgc3RhdF9tbXJiYzsKKwllMTAwMF9idXNfdHlwZSBidXNfdHlwZSA9IGUxMDAwX2J1c190eXBlX3Vua25vd247CisKKwlERUJVR0ZVTkMoKTsKKyNpZiAwCisJLyogSW5pdGlhbGl6ZSBJZGVudGlmaWNhdGlvbiBMRUQgKi8KKwlyZXRfdmFsID0gZTEwMDBfaWRfbGVkX2luaXQoaHcpOworCWlmIChyZXRfdmFsIDwgMCkgeworCQlERUJVR09VVCgiRXJyb3IgSW5pdGlhbGl6aW5nIElkZW50aWZpY2F0aW9uIExFRFxuIik7CisJCXJldHVybiByZXRfdmFsOworCX0KKyNlbmRpZgorCS8qIFNldCB0aGUgTWVkaWEgVHlwZSBhbmQgZXhpdCB3aXRoIGVycm9yIGlmIGl0IGlzIG5vdCB2YWxpZC4gKi8KKwlpZiAoaHctPm1hY190eXBlICE9IGUxMDAwXzgyNTQzKSB7CisJCS8qIHRiaV9jb21wYXRpYmlsaXR5IGlzIG9ubHkgdmFsaWQgb24gODI1NDMgKi8KKwkJaHctPnRiaV9jb21wYXRpYmlsaXR5X2VuID0gRkFMU0U7CisJfQorCisJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MykgeworCQlzdGF0dXMgPSBFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKTsKKwkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19UQklNT0RFKSB7CisJCQlody0+bWVkaWFfdHlwZSA9IGUxMDAwX21lZGlhX3R5cGVfZmliZXI7CisJCQkvKiB0YmlfY29tcGF0aWJpbGl0eSBub3QgdmFsaWQgb24gZmliZXIgKi8KKwkJCWh3LT50YmlfY29tcGF0aWJpbGl0eV9lbiA9IEZBTFNFOworCQl9IGVsc2UgeworCQkJaHctPm1lZGlhX3R5cGUgPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRoaXMgaXMgYW4gODI1NDIgKGZpYmVyIG9ubHkpICovCisJCWh3LT5tZWRpYV90eXBlID0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcjsKKwl9CisKKwkvKiBEaXNhYmxpbmcgVkxBTiBmaWx0ZXJpbmcuICovCisJREVCVUdPVVQoIkluaXRpYWxpemluZyB0aGUgSUVFRSBWTEFOXG4iKTsKKwlFMTAwMF9XUklURV9SRUcoaHcsIFZFVCwgMCk7CisKKwllMTAwMF9jbGVhcl92ZnRhKGh3KTsKKworCS8qIEZvciA4MjU0MiAocmV2IDIuMCksIGRpc2FibGUgTVdJIGFuZCBwdXQgdGhlIHJlY2VpdmVyIGludG8gcmVzZXQgKi8KKwlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkgeworCQlERUJVR09VVCgiRGlzYWJsaW5nIE1XSSBvbiA4MjU0MiByZXYgMi4wXG4iKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lfQ09NTUFORCwKKwkJCQkgICAgICBody0+CisJCQkJICAgICAgcGNpX2NtZF93b3JkICYgflBDSV9DT01NQU5EX0lOVkFMSURBVEUpOworCQlFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIEUxMDAwX1JDVExfUlNUKTsKKwkJRTEwMDBfV1JJVEVfRkxVU0goaHcpOworCQltZGVsYXkoNSk7CisJfQorCisJLyogU2V0dXAgdGhlIHJlY2VpdmUgYWRkcmVzcy4gVGhpcyBpbnZvbHZlcyBpbml0aWFsaXppbmcgYWxsIG9mIHRoZSBSZWNlaXZlCisJICogQWRkcmVzcyBSZWdpc3RlcnMgKFJBUnMgMCAtIDE1KS4KKwkgKi8KKwllMTAwMF9pbml0X3J4X2FkZHJzKG5pYyk7CisKKwkvKiBGb3IgODI1NDIgKHJldiAyLjApLCB0YWtlIHRoZSByZWNlaXZlciBvdXQgb2YgcmVzZXQgYW5kIGVuYWJsZSBNV0kgKi8KKwlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkgeworCQlFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIDApOworCQlFMTAwMF9XUklURV9GTFVTSChodyk7CisJCW1kZWxheSgxKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lfQ09NTUFORCwgaHctPnBjaV9jbWRfd29yZCk7CisJfQorCisJLyogWmVybyBvdXQgdGhlIE11bHRpY2FzdCBIQVNIIHRhYmxlICovCisJREVCVUdPVVQoIlplcm9pbmcgdGhlIE1UQVxuIik7CisJZm9yIChpID0gMDsgaSA8IEUxMDAwX01DX1RCTF9TSVpFOyBpKyspCisJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgTVRBLCBpLCAwKTsKKworI2lmIDAKKwkvKiBTZXQgdGhlIFBDSSBwcmlvcml0eSBiaXQgY29ycmVjdGx5IGluIHRoZSBDVFJMIHJlZ2lzdGVyLiAgVGhpcworCSAqIGRldGVybWluZXMgaWYgdGhlIGFkYXB0ZXIgZ2l2ZXMgcHJpb3JpdHkgdG8gcmVjZWl2ZXMsIG9yIGlmIGl0CisJICogZ2l2ZXMgZXF1YWwgcHJpb3JpdHkgdG8gdHJhbnNtaXRzIGFuZCByZWNlaXZlcy4KKwkgKi8KKwlpZiAoaHctPmRtYV9mYWlybmVzcykgeworCQljdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOworCQlFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwgfCBFMTAwMF9DVFJMX1BSSU9SKTsKKwl9CisjZW5kaWYKKwlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSB7CisJCXN0YXR1cyA9IEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpOworCQlidXNfdHlwZSA9IChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfUENJWF9NT0RFKSA/CisJCSAgICBlMTAwMF9idXNfdHlwZV9wY2l4IDogZTEwMDBfYnVzX3R5cGVfcGNpOworCX0KKwkvKiBXb3JrYXJvdW5kIGZvciBQQ0ktWCBwcm9ibGVtIHdoZW4gQklPUyBzZXRzIE1NUkJDIGluY29ycmVjdGx5LiAqLworCWlmIChidXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2l4KSB7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lYX0NPTU1BTkRfUkVHSVNURVIsCisJCQkJICAgICAmcGNpeF9jbWRfd29yZCk7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lYX1NUQVRVU19SRUdJU1RFUl9ISSwKKwkJCQkgICAgICZwY2l4X3N0YXRfaGlfd29yZCk7CisJCWNtZF9tbXJiYyA9CisJCSAgICAocGNpeF9jbWRfd29yZCAmIFBDSVhfQ09NTUFORF9NTVJCQ19NQVNLKSA+PgorCQkgICAgUENJWF9DT01NQU5EX01NUkJDX1NISUZUOworCQlzdGF0X21tcmJjID0KKwkJICAgIChwY2l4X3N0YXRfaGlfd29yZCAmIFBDSVhfU1RBVFVTX0hJX01NUkJDX01BU0spID4+CisJCSAgICBQQ0lYX1NUQVRVU19ISV9NTVJCQ19TSElGVDsKKwkJaWYgKHN0YXRfbW1yYmMgPT0gUENJWF9TVEFUVVNfSElfTU1SQkNfNEspCisJCQlzdGF0X21tcmJjID0gUENJWF9TVEFUVVNfSElfTU1SQkNfMks7CisJCWlmIChjbWRfbW1yYmMgPiBzdGF0X21tcmJjKSB7CisJCQlwY2l4X2NtZF93b3JkICY9IH5QQ0lYX0NPTU1BTkRfTU1SQkNfTUFTSzsKKwkJCXBjaXhfY21kX3dvcmQgfD0gc3RhdF9tbXJiYyA8PCBQQ0lYX0NPTU1BTkRfTU1SQkNfU0hJRlQ7CisJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaHctPnBkZXYsIFBDSVhfQ09NTUFORF9SRUdJU1RFUiwKKwkJCQkJICAgICAgcGNpeF9jbWRfd29yZCk7CisJCX0KKwl9CisKKwkvKiBDYWxsIGEgc3Vicm91dGluZSB0byBjb25maWd1cmUgdGhlIGxpbmsgYW5kIHNldHVwIGZsb3cgY29udHJvbC4gKi8KKwlyZXRfdmFsID0gZTEwMDBfc2V0dXBfbGluayhuaWMpOworCisJLyogU2V0IHRoZSB0cmFuc21pdCBkZXNjcmlwdG9yIHdyaXRlLWJhY2sgcG9saWN5ICovCisJaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ0KSB7CisJCWN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgVFhEQ1RMKTsKKwkJY3RybCA9CisJCSAgICAoY3RybCAmIH5FMTAwMF9UWERDVExfV1RIUkVTSCkgfAorCQkgICAgRTEwMDBfVFhEQ1RMX0ZVTExfVFhfREVTQ19XQjsKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBUWERDVEwsIGN0cmwpOworCX0KKyNpZiAwCisJLyogQ2xlYXIgYWxsIG9mIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyAoY2xlYXIgb24gcmVhZCkuICBJdCBpcworCSAqIGltcG9ydGFudCB0aGF0IHdlIGRvIHRoaXMgYWZ0ZXIgd2UgaGF2ZSB0cmllZCB0byBlc3RhYmxpc2ggbGluaworCSAqIGJlY2F1c2UgdGhlIHN5bWJvbCBlcnJvciBjb3VudCB3aWxsIGluY3JlbWVudCB3aWxkbHkgaWYgdGhlcmUKKwkgKiBpcyBubyBsaW5rLgorCSAqLworCWUxMDAwX2NsZWFyX2h3X2NudHJzKGh3KTsKKyNlbmRpZgorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbmZpZ3VyZXMgZmxvdyBjb250cm9sIGFuZCBsaW5rIHNldHRpbmdzLgorICogCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICogCisgKiBEZXRlcm1pbmVzIHdoaWNoIGZsb3cgY29udHJvbCBzZXR0aW5ncyB0byB1c2UuIENhbGxzIHRoZSBhcHJvcHJpYXRlIG1lZGlhLQorICogc3BlY2lmaWMgbGluayBjb25maWd1cmF0aW9uIGZ1bmN0aW9uLiBDb25maWd1cmVzIHRoZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MuCisgKiBBc3N1bWluZyB0aGUgYWRhcHRlciBoYXMgYSB2YWxpZCBsaW5rIHBhcnRuZXIsIGEgdmFsaWQgbGluayBzaG91bGQgYmUKKyAqIGVzdGFibGlzaGVkLiBBc3N1bWVzIHRoZSBoYXJkd2FyZSBoYXMgcHJldmlvdXNseSBiZWVuIHJlc2V0IGFuZCB0aGUgCisgKiB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIgYXJlIG5vdCBlbmFibGVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorZTEwMDBfc2V0dXBfbGluayhzdHJ1Y3QgZXRoX2RldmljZSAqbmljKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSBuaWMtPnByaXY7CisJdWludDMyX3QgY3RybF9leHQ7CisJaW50MzJfdCByZXRfdmFsOworCXVpbnQxNl90IGVlcHJvbV9kYXRhOworCisJREVCVUdGVU5DKCk7CisKKwkvKiBSZWFkIGFuZCBzdG9yZSB3b3JkIDB4MEYgb2YgdGhlIEVFUFJPTS4gVGhpcyB3b3JkIGNvbnRhaW5zIGJpdHMKKwkgKiB0aGF0IGRldGVybWluZSB0aGUgaGFyZHdhcmUncyBkZWZhdWx0IFBBVVNFIChmbG93IGNvbnRyb2wpIG1vZGUsCisJICogYSBiaXQgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIEhXIGRlZmF1bHRzIHRvIGVuYWJsaW5nIG9yCisJICogZGlzYWJsaW5nIGF1dG8tbmVnb3RpYXRpb24sIGFuZCB0aGUgZGlyZWN0aW9uIG9mIHRoZQorCSAqIFNXIGRlZmluZWQgcGlucy4gSWYgdGhlcmUgaXMgbm8gU1cgb3Zlci1yaWRlIG9mIHRoZSBmbG93CisJICogY29udHJvbCBzZXR0aW5nLCB0aGVuIHRoZSB2YXJpYWJsZSBody0+ZmMgd2lsbAorCSAqIGJlIGluaXRpYWxpemVkIGJhc2VkIG9uIGEgdmFsdWUgaW4gdGhlIEVFUFJPTS4KKwkgKi8KKwlpZiAoZTEwMDBfcmVhZF9lZXByb20oaHcsIEVFUFJPTV9JTklUX0NPTlRST0wyX1JFRywgJmVlcHJvbV9kYXRhKSA8IDApIHsKKwkJREVCVUdPVVQoIkVFUFJPTSBSZWFkIEVycm9yXG4iKTsKKwkJcmV0dXJuIC1FMTAwMF9FUlJfRUVQUk9NOworCX0KKworCWlmIChody0+ZmMgPT0gZTEwMDBfZmNfZGVmYXVsdCkgeworCQlpZiAoKGVlcHJvbV9kYXRhICYgRUVQUk9NX1dPUkQwRl9QQVVTRV9NQVNLKSA9PSAwKQorCQkJaHctPmZjID0gZTEwMDBfZmNfbm9uZTsKKwkJZWxzZSBpZiAoKGVlcHJvbV9kYXRhICYgRUVQUk9NX1dPUkQwRl9QQVVTRV9NQVNLKSA9PQorCQkJIEVFUFJPTV9XT1JEMEZfQVNNX0RJUikKKwkJCWh3LT5mYyA9IGUxMDAwX2ZjX3R4X3BhdXNlOworCQllbHNlCisJCQlody0+ZmMgPSBlMTAwMF9mY19mdWxsOworCX0KKworCS8qIFdlIHdhbnQgdG8gc2F2ZSBvZmYgdGhlIG9yaWdpbmFsIEZsb3cgQ29udHJvbCBjb25maWd1cmF0aW9uIGp1c3QKKwkgKiBpbiBjYXNlIHdlIGdldCBkaXNjb25uZWN0ZWQgYW5kIHRoZW4gcmVjb25uZWN0ZWQgaW50byBhIGRpZmZlcmVudAorCSAqIGh1YiBvciBzd2l0Y2ggd2l0aCBkaWZmZXJlbnQgRmxvdyBDb250cm9sIGNhcGFiaWxpdGllcy4KKwkgKi8KKwlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkKKwkJaHctPmZjICY9ICh+ZTEwMDBfZmNfdHhfcGF1c2UpOworCisJaWYgKChody0+bWFjX3R5cGUgPCBlMTAwMF84MjU0MykgJiYgKGh3LT5yZXBvcnRfdHhfZWFybHkgPT0gMSkpCisJCWh3LT5mYyAmPSAofmUxMDAwX2ZjX3J4X3BhdXNlKTsKKworCWh3LT5vcmlnaW5hbF9mYyA9IGh3LT5mYzsKKworCURFQlVHT1VUKCJBZnRlciBmaXgtdXBzIEZsb3dDb250cm9sIGlzIG5vdyA9ICV4XG4iLCBody0+ZmMpOworCisJLyogVGFrZSB0aGUgNCBiaXRzIGZyb20gRUVQUk9NIHdvcmQgMHgwRiB0aGF0IGRldGVybWluZSB0aGUgaW5pdGlhbAorCSAqIHBvbGFyaXR5IHZhbHVlIGZvciB0aGUgU1cgY29udHJvbGxlZCBwaW5zLCBhbmQgc2V0dXAgdGhlCisJICogRXh0ZW5kZWQgRGV2aWNlIENvbnRyb2wgcmVnIHdpdGggdGhhdCBpbmZvLgorCSAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb25lIG9mIHRoZSBTVyBjb250cm9sbGVkIHBpbnMgaXMgdXNlZCBmb3IKKwkgKiBzaWduYWwgZGV0ZWN0aW9uLiAgU28gdGhpcyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgZTEwMDBfc2V0dXBfcGNzX2xpbmsoKQorCSAqIG9yIGUxMDAwX3BoeV9zZXR1cCgpIGlzIGNhbGxlZC4KKwkgKi8KKwlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQzKSB7CisJCWN0cmxfZXh0ID0gKChlZXByb21fZGF0YSAmIEVFUFJPTV9XT1JEMEZfU1dQRElPX0VYVCkgPDwKKwkJCSAgICBTV0RQSU9fX0VYVF9TSElGVCk7CisJCUUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTF9FWFQsIGN0cmxfZXh0KTsKKwl9CisKKwkvKiBDYWxsIHRoZSBuZWNlc3Nhcnkgc3Vicm91dGluZSB0byBjb25maWd1cmUgdGhlIGxpbmsuICovCisJcmV0X3ZhbCA9IChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSA/CisJICAgIGUxMDAwX3NldHVwX2ZpYmVyX2xpbmsobmljKSA6IGUxMDAwX3NldHVwX2NvcHBlcl9saW5rKG5pYyk7CisJaWYgKHJldF92YWwgPCAwKSB7CisJCXJldHVybiByZXRfdmFsOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGZsb3cgY29udHJvbCBhZGRyZXNzLCB0eXBlLCBhbmQgUEFVU0UgdGltZXIKKwkgKiByZWdpc3RlcnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuICBUaGlzIGlzIGRvbmUgZXZlbiBpZiBmbG93CisJICogY29udHJvbCBpcyBkaXNhYmxlZCwgYmVjYXVzZSBpdCBkb2VzIG5vdCBodXJ0IGFueXRoaW5nIHRvCisJICogaW5pdGlhbGl6ZSB0aGVzZSByZWdpc3RlcnMuCisJICovCisJREVCVUdPVVQKKwkgICAgKCJJbml0aWFsaXppbmcgdGhlIEZsb3cgQ29udHJvbCBhZGRyZXNzLCB0eXBlIGFuZCB0aW1lciByZWdzXG4iKTsKKworCUUxMDAwX1dSSVRFX1JFRyhodywgRkNBTCwgRkxPV19DT05UUk9MX0FERFJFU1NfTE9XKTsKKwlFMTAwMF9XUklURV9SRUcoaHcsIEZDQUgsIEZMT1dfQ09OVFJPTF9BRERSRVNTX0hJR0gpOworCUUxMDAwX1dSSVRFX1JFRyhodywgRkNULCBGTE9XX0NPTlRST0xfVFlQRSk7CisJRTEwMDBfV1JJVEVfUkVHKGh3LCBGQ1RUViwgaHctPmZjX3BhdXNlX3RpbWUpOworCisJLyogU2V0IHRoZSBmbG93IGNvbnRyb2wgcmVjZWl2ZSB0aHJlc2hvbGQgcmVnaXN0ZXJzLiAgTm9ybWFsbHksCisJICogdGhlc2UgcmVnaXN0ZXJzIHdpbGwgYmUgc2V0IHRvIGEgZGVmYXVsdCB0aHJlc2hvbGQgdGhhdCBtYXkgYmUKKwkgKiBhZGp1c3RlZCBsYXRlciBieSB0aGUgZHJpdmVyJ3MgcnVudGltZSBjb2RlLiAgSG93ZXZlciwgaWYgdGhlCisJICogYWJpbGl0eSB0byB0cmFuc21pdCBwYXVzZSBmcmFtZXMgaW4gbm90IGVuYWJsZWQsIHRoZW4gdGhlc2UKKwkgKiByZWdpc3RlcnMgd2lsbCBiZSBzZXQgdG8gMC4gCisJICovCisJaWYgKCEoaHctPmZjICYgZTEwMDBfZmNfdHhfcGF1c2UpKSB7CisJCUUxMDAwX1dSSVRFX1JFRyhodywgRkNSVEwsIDApOworCQlFMTAwMF9XUklURV9SRUcoaHcsIEZDUlRILCAwKTsKKwl9IGVsc2UgeworCQkvKiBXZSBuZWVkIHRvIHNldCB1cCB0aGUgUmVjZWl2ZSBUaHJlc2hvbGQgaGlnaCBhbmQgbG93IHdhdGVyIG1hcmtzCisJCSAqIGFzIHdlbGwgYXMgKG9wdGlvbmFsbHkpIGVuYWJsaW5nIHRoZSB0cmFuc21pc3Npb24gb2YgWE9OIGZyYW1lcy4KKwkJICovCisJCWlmIChody0+ZmNfc2VuZF94b24pIHsKKwkJCUUxMDAwX1dSSVRFX1JFRyhodywgRkNSVEwsCisJCQkJCShody0+ZmNfbG93X3dhdGVyIHwgRTEwMDBfRkNSVExfWE9ORSkpOworCQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBGQ1JUSCwgaHctPmZjX2hpZ2hfd2F0ZXIpOworCQl9IGVsc2UgeworCQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBGQ1JUTCwgaHctPmZjX2xvd193YXRlcik7CisJCQlFMTAwMF9XUklURV9SRUcoaHcsIEZDUlRILCBody0+ZmNfaGlnaF93YXRlcik7CisJCX0KKwl9CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNldHMgdXAgbGluayBmb3IgYSBmaWJlciBiYXNlZCBhZGFwdGVyCisgKgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqCisgKiBNYW5pcHVsYXRlcyBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgZnVuY3Rpb25zIGluIG9yZGVyIHRvIGNvbmZpZ3VyZQorICogbGluay4gQXNzdW1lcyB0aGUgaGFyZHdhcmUgaGFzIGJlZW4gcHJldmlvdXNseSByZXNldCBhbmQgdGhlIHRyYW5zbWl0dGVyCisgKiBhbmQgcmVjZWl2ZXIgYXJlIG5vdCBlbmFibGVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorZTEwMDBfc2V0dXBfZmliZXJfbGluayhzdHJ1Y3QgZXRoX2RldmljZSAqbmljKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSBuaWMtPnByaXY7CisJdWludDMyX3QgY3RybDsKKwl1aW50MzJfdCBzdGF0dXM7CisJdWludDMyX3QgdHhjdyA9IDA7CisJdWludDMyX3QgaTsKKwl1aW50MzJfdCBzaWduYWw7CisJaW50MzJfdCByZXRfdmFsOworCisJREVCVUdGVU5DKCk7CisJLyogT24gYWRhcHRlcnMgd2l0aCBhIE1BQyBuZXdlciB0aGF0IDgyNTQ0LCBTVyBEZWZpbmVhYmxlIHBpbiAxIHdpbGwgYmUgCisJICogc2V0IHdoZW4gdGhlIG9wdGljcyBkZXRlY3QgYSBzaWduYWwuIE9uIG9sZGVyIGFkYXB0ZXJzLCBpdCB3aWxsIGJlIAorCSAqIGNsZWFyZWQgd2hlbiB0aGVyZSBpcyBhIHNpZ25hbAorCSAqLworCWN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTCk7CisJaWYgKChody0+bWFjX3R5cGUgPiBlMTAwMF84MjU0NCkgJiYgIShjdHJsICYgRTEwMDBfQ1RSTF9JTE9TKSkKKwkJc2lnbmFsID0gRTEwMDBfQ1RSTF9TV0RQSU4xOworCWVsc2UKKwkJc2lnbmFsID0gMDsKKworCXByaW50Zigic2lnbmFsIGZvciAlcyBpcyAleCAoY3RybCAlMDh4KSEhISFcbiIsIG5pYy0+bmFtZSwgc2lnbmFsLAorCSAgICAgICBjdHJsKTsKKwkvKiBUYWtlIHRoZSBsaW5rIG91dCBvZiByZXNldCAqLworCWN0cmwgJj0gfihFMTAwMF9DVFJMX0xSU1QpOworCisJZTEwMDBfY29uZmlnX2NvbGxpc2lvbl9kaXN0KGh3KTsKKworCS8qIENoZWNrIGZvciBhIHNvZnR3YXJlIG92ZXJyaWRlIG9mIHRoZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MsIGFuZCBzZXR1cAorCSAqIHRoZSBkZXZpY2UgYWNjb3JkaW5nbHkuICBJZiBhdXRvLW5lZ290aWF0aW9uIGlzIGVuYWJsZWQsIHRoZW4gc29mdHdhcmUKKwkgKiB3aWxsIGhhdmUgdG8gc2V0IHRoZSAiUEFVU0UiIGJpdHMgdG8gdGhlIGNvcnJlY3QgdmFsdWUgaW4gdGhlIFRyYW5tc2l0CisJICogQ29uZmlnIFdvcmQgUmVnaXN0ZXIgKFRYQ1cpIGFuZCByZS1zdGFydCBhdXRvLW5lZ290aWF0aW9uLiAgSG93ZXZlciwgaWYKKwkgKiBhdXRvLW5lZ290aWF0aW9uIGlzIGRpc2FibGVkLCB0aGVuIHNvZnR3YXJlIHdpbGwgaGF2ZSB0byBtYW51YWxseSAKKwkgKiBjb25maWd1cmUgdGhlIHR3byBmbG93IGNvbnRyb2wgZW5hYmxlIGJpdHMgaW4gdGhlIENUUkwgcmVnaXN0ZXIuCisJICoKKwkgKiBUaGUgcG9zc2libGUgdmFsdWVzIG9mIHRoZSAiZmMiIHBhcmFtZXRlciBhcmU6CisJICogICAgICAwOiAgRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQKKwkgKiAgICAgIDE6ICBSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHJlY2VpdmUgcGF1c2UgZnJhbWVzLCBidXQgCisJICogICAgICAgICAgbm90IHNlbmQgcGF1c2UgZnJhbWVzKS4KKwkgKiAgICAgIDI6ICBUeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHNlbmQgcGF1c2UgZnJhbWVzIGJ1dCB3ZSBkbworCSAqICAgICAgICAgIG5vdCBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpLgorCSAqICAgICAgMzogIEJvdGggUnggYW5kIFRYIGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KKwkgKi8KKwlzd2l0Y2ggKGh3LT5mYykgeworCWNhc2UgZTEwMDBfZmNfbm9uZToKKwkJLyogRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQgYnkgYSBzb2Z0d2FyZSBvdmVyLXJpZGUuICovCisJCXR4Y3cgPSAoRTEwMDBfVFhDV19BTkUgfCBFMTAwMF9UWENXX0ZEKTsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9mY19yeF9wYXVzZToKKwkJLyogUlggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQgYW5kIFRYIEZsb3cgY29udHJvbCBpcyBkaXNhYmxlZCBieSBhIAorCQkgKiBzb2Z0d2FyZSBvdmVyLXJpZGUuIFNpbmNlIHRoZXJlIHJlYWxseSBpc24ndCBhIHdheSB0byBhZHZlcnRpc2UgCisJCSAqIHRoYXQgd2UgYXJlIGNhcGFibGUgb2YgUlggUGF1c2UgT05MWSwgd2Ugd2lsbCBhZHZlcnRpc2UgdGhhdCB3ZQorCQkgKiBzdXBwb3J0IGJvdGggc3ltbWV0cmljIGFuZCBhc3ltbWV0cmljIFJYIFBBVVNFLiBMYXRlciwgd2Ugd2lsbAorCQkgKiAgZGlzYWJsZSB0aGUgYWRhcHRlcidzIGFiaWxpdHkgdG8gc2VuZCBQQVVTRSBmcmFtZXMuCisJCSAqLworCQl0eGN3ID0gKEUxMDAwX1RYQ1dfQU5FIHwgRTEwMDBfVFhDV19GRCB8IEUxMDAwX1RYQ1dfUEFVU0VfTUFTSyk7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfZmNfdHhfcGF1c2U6CisJCS8qIFRYIEZsb3cgY29udHJvbCBpcyBlbmFibGVkLCBhbmQgUlggRmxvdyBjb250cm9sIGlzIGRpc2FibGVkLCBieSBhIAorCQkgKiBzb2Z0d2FyZSBvdmVyLXJpZGUuCisJCSAqLworCQl0eGN3ID0gKEUxMDAwX1RYQ1dfQU5FIHwgRTEwMDBfVFhDV19GRCB8IEUxMDAwX1RYQ1dfQVNNX0RJUik7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfZmNfZnVsbDoKKwkJLyogRmxvdyBjb250cm9sIChib3RoIFJYIGFuZCBUWCkgaXMgZW5hYmxlZCBieSBhIHNvZnR3YXJlIG92ZXItcmlkZS4gKi8KKwkJdHhjdyA9IChFMTAwMF9UWENXX0FORSB8IEUxMDAwX1RYQ1dfRkQgfCBFMTAwMF9UWENXX1BBVVNFX01BU0spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR09VVCgiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7CisJCXJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKKwkJYnJlYWs7CisJfQorCisJLyogU2luY2UgYXV0by1uZWdvdGlhdGlvbiBpcyBlbmFibGVkLCB0YWtlIHRoZSBsaW5rIG91dCBvZiByZXNldCAodGhlIGxpbmsKKwkgKiB3aWxsIGJlIGluIHJlc2V0LCBiZWNhdXNlIHdlIHByZXZpb3VzbHkgcmVzZXQgdGhlIGNoaXApLiBUaGlzIHdpbGwKKwkgKiByZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24uICBJZiBhdXRvLW5lb2d0aWF0aW9uIGlzIHN1Y2Nlc3NmdWwgdGhlbiB0aGUKKwkgKiBsaW5rLXVwIHN0YXR1cyBiaXQgd2lsbCBiZSBzZXQgYW5kIHRoZSBmbG93IGNvbnRyb2wgZW5hYmxlIGJpdHMgKFJGQ0UKKwkgKiBhbmQgVEZDRSkgd2lsbCBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZWlyIG5lZ290aWF0ZWQgdmFsdWUuCisJICovCisJREVCVUdPVVQoIkF1dG8tbmVnb3RpYXRpb24gZW5hYmxlZCAoJSN4KVxuIiwgdHhjdyk7CisKKwlFMTAwMF9XUklURV9SRUcoaHcsIFRYQ1csIHR4Y3cpOworCUUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgY3RybCk7CisJRTEwMDBfV1JJVEVfRkxVU0goaHcpOworCisJaHctPnR4Y3cgPSB0eGN3OworCW1kZWxheSgxKTsKKworCS8qIElmIHdlIGhhdmUgYSBzaWduYWwgKHRoZSBjYWJsZSBpcyBwbHVnZ2VkIGluKSB0aGVuIHBvbGwgZm9yIGEgIkxpbmstVXAiCisJICogaW5kaWNhdGlvbiBpbiB0aGUgRGV2aWNlIFN0YXR1cyBSZWdpc3Rlci4gIFRpbWUtb3V0IGlmIGEgbGluayBpc24ndCAKKwkgKiBzZWVuIGluIDUwMCBtaWxsaXNlY29uZHMgc2Vjb25kcyAoQXV0by1uZWdvdGlhdGlvbiBzaG91bGQgY29tcGxldGUgaW4gCisJICogbGVzcyB0aGFuIDUwMCBtaWxsaXNlY29uZHMgZXZlbiBpZiB0aGUgb3RoZXIgZW5kIGlzIGRvaW5nIGl0IGluIFNXKS4KKwkgKi8KKwlpZiAoKEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKSAmIEUxMDAwX0NUUkxfU1dEUElOMSkgPT0gc2lnbmFsKSB7CisJCURFQlVHT1VUKCJMb29raW5nIGZvciBMaW5rXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IChMSU5LX1VQX1RJTUVPVVQgLyAxMCk7IGkrKykgeworCQkJbWRlbGF5KDEwKTsKKwkJCXN0YXR1cyA9IEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpOworCQkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19MVSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSAoTElOS19VUF9USU1FT1VUIC8gMTApKSB7CisJCQkvKiBBdXRvTmVnIGZhaWxlZCB0byBhY2hpZXZlIGEgbGluaywgc28gd2UnbGwgY2FsbCAKKwkJCSAqIGUxMDAwX2NoZWNrX2Zvcl9saW5rLiBUaGlzIHJvdXRpbmUgd2lsbCBmb3JjZSB0aGUgbGluayB1cCBpZiB3ZQorCQkJICogZGV0ZWN0IGEgc2lnbmFsLiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gY29tbXVuaWNhdGUgd2l0aAorCQkJICogbm9uLWF1dG9uZWdvdGlhdGluZyBsaW5rIHBhcnRuZXJzLgorCQkJICovCisJCQlERUJVR09VVCgiTmV2ZXIgZ290IGEgdmFsaWQgbGluayBmcm9tIGF1dG8tbmVnISEhXG4iKTsKKwkJCWh3LT5hdXRvbmVnX2ZhaWxlZCA9IDE7CisJCQlyZXRfdmFsID0gZTEwMDBfY2hlY2tfZm9yX2xpbmsobmljKTsKKwkJCWlmIChyZXRfdmFsIDwgMCkgeworCQkJCURFQlVHT1VUKCJFcnJvciB3aGlsZSBjaGVja2luZyBmb3IgbGlua1xuIik7CisJCQkJcmV0dXJuIHJldF92YWw7CisJCQl9CisJCQlody0+YXV0b25lZ19mYWlsZWQgPSAwOworCQl9IGVsc2UgeworCQkJaHctPmF1dG9uZWdfZmFpbGVkID0gMDsKKwkJCURFQlVHT1VUKCJWYWxpZCBMaW5rIEZvdW5kXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCURFQlVHT1VUKCJObyBTaWduYWwgRGV0ZWN0ZWRcbiIpOworCQlyZXR1cm4gLUUxMDAwX0VSUl9OT0xJTks7CisJfQorCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIERldGVjdHMgd2hpY2ggUEhZIGlzIHByZXNlbnQgYW5kIHRoZSBzcGVlZCBhbmQgZHVwbGV4CisqCisqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CitlMTAwMF9zZXR1cF9jb3BwZXJfbGluayhzdHJ1Y3QgZXRoX2RldmljZSAqbmljKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSBuaWMtPnByaXY7CisJdWludDMyX3QgY3RybDsKKwlpbnQzMl90IHJldF92YWw7CisJdWludDE2X3QgaTsKKwl1aW50MTZfdCBwaHlfZGF0YTsKKworCURFQlVHRlVOQygpOworCisJY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKwkvKiBXaXRoIDgyNTQzLCB3ZSBuZWVkIHRvIGZvcmNlIHNwZWVkIGFuZCBkdXBsZXggb24gdGhlIE1BQyBlcXVhbCB0byB3aGF0CisJICogdGhlIFBIWSBzcGVlZCBhbmQgZHVwbGV4IGNvbmZpZ3VyYXRpb24gaXMuIEluIGFkZGl0aW9uLCB3ZSBuZWVkIHRvCisJICogcGVyZm9ybSBhIGhhcmR3YXJlIHJlc2V0IG9uIHRoZSBQSFkgdG8gdGFrZSBpdCBvdXQgb2YgcmVzZXQuCisJICovCisJaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQzKSB7CisJCWN0cmwgfD0gRTEwMDBfQ1RSTF9TTFU7CisJCWN0cmwgJj0gfihFMTAwMF9DVFJMX0ZSQ1NQRCB8IEUxMDAwX0NUUkxfRlJDRFBYKTsKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKKwl9IGVsc2UgeworCQljdHJsIHw9CisJCSAgICAoRTEwMDBfQ1RSTF9GUkNTUEQgfCBFMTAwMF9DVFJMX0ZSQ0RQWCB8IEUxMDAwX0NUUkxfU0xVKTsKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKKwkJZTEwMDBfcGh5X2h3X3Jlc2V0KGh3KTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIFBIWSAqLworCXJldF92YWwgPSBlMTAwMF9kZXRlY3RfZ2lnX3BoeShodyk7CisJaWYgKHJldF92YWwgPCAwKSB7CisJCURFQlVHT1VUKCJFcnJvciwgZGlkIG5vdCBkZXRlY3QgdmFsaWQgcGh5LlxuIik7CisJCXJldHVybiByZXRfdmFsOworCX0KKwlERUJVR09VVCgiUGh5IElEID0gJXggXG4iLCBody0+cGh5X2lkKTsKKworCS8qIEVuYWJsZSBDUlMgb24gVFguIFRoaXMgbXVzdCBiZSBzZXQgZm9yIGhhbGYtZHVwbGV4IG9wZXJhdGlvbi4gKi8KKwlpZiAoZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpIDwgMCkgeworCQlERUJVR09VVCgiUEhZIFJlYWQgRXJyb3JcbiIpOworCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJfQorCXBoeV9kYXRhIHw9IE04OEUxMDAwX1BTQ1JfQVNTRVJUX0NSU19PTl9UWDsKKworI2lmIDAKKwkvKiBPcHRpb25zOgorCSAqICAgTURJL01ESS1YID0gMCAoZGVmYXVsdCkKKwkgKiAgIDAgLSBBdXRvIGZvciBhbGwgc3BlZWRzCisJICogICAxIC0gTURJIG1vZGUKKwkgKiAgIDIgLSBNREktWCBtb2RlCisJICogICAzIC0gQXV0byBmb3IgMTAwMEJhc2UtVCBvbmx5IChNREktWCBmb3IgMTAvMTAwQmFzZS1UIG1vZGVzKQorCSAqLworCXBoeV9kYXRhICY9IH5NODhFMTAwMF9QU0NSX0FVVE9fWF9NT0RFOworCXN3aXRjaCAoaHctPm1kaXgpIHsKKwljYXNlIDE6CisJCXBoeV9kYXRhIHw9IE04OEUxMDAwX1BTQ1JfTURJX01BTlVBTF9NT0RFOworCQlicmVhazsKKwljYXNlIDI6CisJCXBoeV9kYXRhIHw9IE04OEUxMDAwX1BTQ1JfTURJWF9NQU5VQUxfTU9ERTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwaHlfZGF0YSB8PSBNODhFMTAwMF9QU0NSX0FVVE9fWF8xMDAwVDsKKwkJYnJlYWs7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCXBoeV9kYXRhIHw9IE04OEUxMDAwX1BTQ1JfQVVUT19YX01PREU7CisJCWJyZWFrOworCX0KKyNlbHNlCisJcGh5X2RhdGEgfD0gTTg4RTEwMDBfUFNDUl9BVVRPX1hfTU9ERTsKKyNlbmRpZgorCisjaWYgMAorCS8qIE9wdGlvbnM6CisJICogICBkaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb24gPSAwIChkZWZhdWx0KQorCSAqICAgICAgIEF1dG9tYXRpYyBDb3JyZWN0aW9uIGZvciBSZXZlcnNlZCBDYWJsZSBQb2xhcml0eQorCSAqICAgMCAtIERpc2FibGVkCisJICogICAxIC0gRW5hYmxlZAorCSAqLworCXBoeV9kYXRhICY9IH5NODhFMTAwMF9QU0NSX1BPTEFSSVRZX1JFVkVSU0FMOworCWlmIChody0+ZGlzYWJsZV9wb2xhcml0eV9jb3JyZWN0aW9uID09IDEpCisJCXBoeV9kYXRhIHw9IE04OEUxMDAwX1BTQ1JfUE9MQVJJVFlfUkVWRVJTQUw7CisjZWxzZQorCXBoeV9kYXRhICY9IH5NODhFMTAwMF9QU0NSX1BPTEFSSVRZX1JFVkVSU0FMOworI2VuZGlmCisJaWYgKGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsIHBoeV9kYXRhKSA8IDApIHsKKwkJREVCVUdPVVQoIlBIWSBXcml0ZSBFcnJvclxuIik7CisJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwl9CisKKwkvKiBGb3JjZSBUWF9DTEsgaW4gdGhlIEV4dGVuZGVkIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyCisJICogdG8gMjVNSHogY2xvY2suCisJICovCisJaWYgKGUxMDAwX3JlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSkgPCAwKSB7CisJCURFQlVHT1VUKCJQSFkgUmVhZCBFcnJvclxuIik7CisJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwl9CisJcGh5X2RhdGEgfD0gTTg4RTEwMDBfRVBTQ1JfVFhfQ0xLXzI1OworCS8qIENvbmZpZ3VyZSBNYXN0ZXIgYW5kIFNsYXZlIGRvd25zaGlmdCB2YWx1ZXMgKi8KKwlwaHlfZGF0YSAmPSB+KE04OEUxMDAwX0VQU0NSX01BU1RFUl9ET1dOU0hJRlRfTUFTSyB8CisJCSAgICAgIE04OEUxMDAwX0VQU0NSX1NMQVZFX0RPV05TSElGVF9NQVNLKTsKKwlwaHlfZGF0YSB8PSAoTTg4RTEwMDBfRVBTQ1JfTUFTVEVSX0RPV05TSElGVF8xWCB8CisJCSAgICAgTTg4RTEwMDBfRVBTQ1JfU0xBVkVfRE9XTlNISUZUXzFYKTsKKwlpZiAoZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsIHBoeV9kYXRhKSA8IDApIHsKKwkJREVCVUdPVVQoIlBIWSBXcml0ZSBFcnJvclxuIik7CisJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwl9CisKKwkvKiBTVyBSZXNldCB0aGUgUEhZIHNvIGFsbCBjaGFuZ2VzIHRha2UgZWZmZWN0ICovCisJcmV0X3ZhbCA9IGUxMDAwX3BoeV9yZXNldChodyk7CisJaWYgKHJldF92YWwgPCAwKSB7CisJCURFQlVHT1VUKCJFcnJvciBSZXNldHRpbmcgdGhlIFBIWVxuIik7CisJCXJldHVybiByZXRfdmFsOworCX0KKworCS8qIE9wdGlvbnM6CisJICogICBhdXRvbmVnID0gMSAoZGVmYXVsdCkKKwkgKiAgICAgIFBIWSB3aWxsIGFkdmVydGlzZSB2YWx1ZShzKSBwYXJzZWQgZnJvbQorCSAqICAgICAgYXV0b25lZ19hZHZlcnRpc2VkIGFuZCBmYworCSAqICAgYXV0b25lZyA9IDAKKwkgKiAgICAgIFBIWSB3aWxsIGJlIHNldCB0byAxMEgsIDEwRiwgMTAwSCwgb3IgMTAwRgorCSAqICAgICAgZGVwZW5kaW5nIG9uIHZhbHVlIHBhcnNlZCBmcm9tIGZvcmNlZF9zcGVlZF9kdXBsZXguCisJICovCisKKwkvKiBJcyBhdXRvbmVnIGVuYWJsZWQ/ICBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBieSBzb2Z0d2FyZSBvdmVycmlkZS4KKwkgKiBJZiBzbywgY2FsbCBlMTAwMF9waHlfc2V0dXBfYXV0b25lZyByb3V0aW5lIHRvIHBhcnNlIHRoZQorCSAqIGF1dG9uZWdfYWR2ZXJ0aXNlZCBhbmQgZmMgb3B0aW9ucy4gSWYgYXV0b25lZyBpcyBOT1QgZW5hYmxlZCwgdGhlbiB0aGUKKwkgKiB1c2VyIHNob3VsZCBoYXZlIHByb3ZpZGVkIGEgc3BlZWQvZHVwbGV4IG92ZXJyaWRlLiAgSWYgc28sIHRoZW4gY2FsbAorCSAqIGUxMDAwX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXggdG8gcGFyc2UgYW5kIHNldCB0aGlzIHVwLgorCSAqLworCS8qIFBlcmZvcm0gc29tZSBib3VuZHMgY2hlY2tpbmcgb24gdGhlIGh3LT5hdXRvbmVnX2FkdmVydGlzZWQKKwkgKiBwYXJhbWV0ZXIuICBJZiB0aGlzIHZhcmlhYmxlIGlzIHplcm8sIHRoZW4gc2V0IGl0IHRvIHRoZSBkZWZhdWx0LgorCSAqLworCWh3LT5hdXRvbmVnX2FkdmVydGlzZWQgJj0gQVVUT05FR19BRFZFUlRJU0VfU1BFRURfREVGQVVMVDsKKworCS8qIElmIGF1dG9uZWdfYWR2ZXJ0aXNlZCBpcyB6ZXJvLCB3ZSBhc3N1bWUgaXQgd2FzIG5vdCBkZWZhdWx0ZWQKKwkgKiBieSB0aGUgY2FsbGluZyBjb2RlIHNvIHdlIHNldCB0byBhZHZlcnRpc2UgZnVsbCBjYXBhYmlsaXR5LgorCSAqLworCWlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkID09IDApCisJCWh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPSBBVVRPTkVHX0FEVkVSVElTRV9TUEVFRF9ERUZBVUxUOworCisJREVCVUdPVVQoIlJlY29uZmlndXJpbmcgYXV0by1uZWcgYWR2ZXJ0aXNlbWVudCBwYXJhbXNcbiIpOworCXJldF92YWwgPSBlMTAwMF9waHlfc2V0dXBfYXV0b25lZyhodyk7CisJaWYgKHJldF92YWwgPCAwKSB7CisJCURFQlVHT1VUKCJFcnJvciBTZXR0aW5nIHVwIEF1dG8tTmVnb3RpYXRpb25cbiIpOworCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisJREVCVUdPVVQoIlJlc3RhcnRpbmcgQXV0by1OZWdcbiIpOworCisJLyogUmVzdGFydCBhdXRvLW5lZ290aWF0aW9uIGJ5IHNldHRpbmcgdGhlIEF1dG8gTmVnIEVuYWJsZSBiaXQgYW5kCisJICogdGhlIEF1dG8gTmVnIFJlc3RhcnQgYml0IGluIHRoZSBQSFkgY29udHJvbCByZWdpc3Rlci4KKwkgKi8KKwlpZiAoZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgJnBoeV9kYXRhKSA8IDApIHsKKwkJREVCVUdPVVQoIlBIWSBSZWFkIEVycm9yXG4iKTsKKwkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCX0KKwlwaHlfZGF0YSB8PSAoTUlJX0NSX0FVVE9fTkVHX0VOIHwgTUlJX0NSX1JFU1RBUlRfQVVUT19ORUcpOworCWlmIChlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgcGh5X2RhdGEpIDwgMCkgeworCQlERUJVR09VVCgiUEhZIFdyaXRlIEVycm9yXG4iKTsKKwkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCX0KKyNpZiAwCisJLyogRG9lcyB0aGUgdXNlciB3YW50IHRvIHdhaXQgZm9yIEF1dG8tTmVnIHRvIGNvbXBsZXRlIGhlcmUsIG9yCisJICogY2hlY2sgYXQgYSBsYXRlciB0aW1lIChmb3IgZXhhbXBsZSwgY2FsbGJhY2sgcm91dGluZSkuCisJICovCisJaWYgKGh3LT53YWl0X2F1dG9uZWdfY29tcGxldGUpIHsKKwkJcmV0X3ZhbCA9IGUxMDAwX3dhaXRfYXV0b25lZyhodyk7CisJCWlmIChyZXRfdmFsIDwgMCkgeworCQkJREVCVUdPVVQKKwkJCSAgICAoIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIGF1dG9uZWcgdG8gY29tcGxldGVcbiIpOworCQkJcmV0dXJuIHJldF92YWw7CisJCX0KKwl9CisjZWxzZQorCS8qIElmIHdlIGRvIG5vdCB3YWl0IGZvciBhdXRvbmVndGF0aW9uIHRvIGNvbXBsZXRlIEkgCisJICogZG8gbm90IHNlZSBhIHZhbGlkIGxpbmsgc3RhdHVzLgorCSAqLworCXJldF92YWwgPSBlMTAwMF93YWl0X2F1dG9uZWcoaHcpOworCWlmIChyZXRfdmFsIDwgMCkgeworCQlERUJVR09VVCgiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgYXV0b25lZyB0byBjb21wbGV0ZVxuIik7CisJCXJldHVybiByZXRfdmFsOworCX0KKyNlbmRpZgorCisJLyogQ2hlY2sgbGluayBzdGF0dXMuIFdhaXQgdXAgdG8gMTAwIG1pY3Jvc2Vjb25kcyBmb3IgbGluayB0byBiZWNvbWUKKwkgKiB2YWxpZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlpZiAoZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X2RhdGEpIDwgMCkgeworCQkJREVCVUdPVVQoIlBIWSBSZWFkIEVycm9yXG4iKTsKKwkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwkJfQorCQlpZiAoZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X2RhdGEpIDwgMCkgeworCQkJREVCVUdPVVQoIlBIWSBSZWFkIEVycm9yXG4iKTsKKwkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwkJfQorCQlpZiAocGh5X2RhdGEgJiBNSUlfU1JfTElOS19TVEFUVVMpIHsKKwkJCS8qIFdlIGhhdmUgbGluaywgc28gd2UgbmVlZCB0byBmaW5pc2ggdGhlIGNvbmZpZyBwcm9jZXNzOgorCQkJICogICAxKSBTZXQgdXAgdGhlIE1BQyB0byB0aGUgY3VycmVudCBQSFkgc3BlZWQvZHVwbGV4CisJCQkgKiAgICAgIGlmIHdlIGFyZSBvbiA4MjU0My4gIElmIHdlCisJCQkgKiAgICAgIGFyZSBvbiBuZXdlciBzaWxpY29uLCB3ZSBvbmx5IG5lZWQgdG8gY29uZmlndXJlCisJCQkgKiAgICAgIGNvbGxpc2lvbiBkaXN0YW5jZSBpbiB0aGUgVHJhbnNtaXQgQ29udHJvbCBSZWdpc3Rlci4KKwkJCSAqICAgMikgU2V0IHVwIGZsb3cgY29udHJvbCBvbiB0aGUgTUFDIHRvIHRoYXQgZXN0YWJsaXNoZWQgd2l0aAorCQkJICogICAgICB0aGUgbGluayBwYXJ0bmVyLgorCQkJICovCisJCQlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQ0KSB7CisJCQkJZTEwMDBfY29uZmlnX2NvbGxpc2lvbl9kaXN0KGh3KTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0X3ZhbCA9IGUxMDAwX2NvbmZpZ19tYWNfdG9fcGh5KGh3KTsKKwkJCQlpZiAocmV0X3ZhbCA8IDApIHsKKwkJCQkJREVCVUdPVVQKKwkJCQkJICAgICgiRXJyb3IgY29uZmlndXJpbmcgTUFDIHRvIFBIWSBzZXR0aW5nc1xuIik7CisJCQkJCXJldHVybiByZXRfdmFsOworCQkJCX0KKwkJCX0KKwkJCXJldF92YWwgPSBlMTAwMF9jb25maWdfZmNfYWZ0ZXJfbGlua191cChodyk7CisJCQlpZiAocmV0X3ZhbCA8IDApIHsKKwkJCQlERUJVR09VVCgiRXJyb3IgQ29uZmlndXJpbmcgRmxvdyBDb250cm9sXG4iKTsKKwkJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJCX0KKwkJCURFQlVHT1VUKCJWYWxpZCBsaW5rIGVzdGFibGlzaGVkISEhXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCXVkZWxheSgxMCk7CisJfQorCisJREVCVUdPVVQoIlVuYWJsZSB0byBlc3RhYmxpc2ggbGluayEhIVxuIik7CisJcmV0dXJuIC1FMTAwMF9FUlJfTk9MSU5LOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvbmZpZ3VyZXMgUEhZIGF1dG9uZWcgYW5kIGZsb3cgY29udHJvbCBhZHZlcnRpc2VtZW50IHNldHRpbmdzCisqCisqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CitlMTAwMF9waHlfc2V0dXBfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXVpbnQxNl90IG1paV9hdXRvbmVnX2Fkdl9yZWc7CisJdWludDE2X3QgbWlpXzEwMDB0X2N0cmxfcmVnOworCisJREVCVUdGVU5DKCk7CisKKwkvKiBSZWFkIHRoZSBNSUkgQXV0by1OZWcgQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAoQWRkcmVzcyA0KS4gKi8KKwlpZiAoZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsICZtaWlfYXV0b25lZ19hZHZfcmVnKSA8IDApIHsKKwkJREVCVUdPVVQoIlBIWSBSZWFkIEVycm9yXG4iKTsKKwkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCX0KKworCS8qIFJlYWQgdGhlIE1JSSAxMDAwQmFzZS1UIENvbnRyb2wgUmVnaXN0ZXIgKEFkZHJlc3MgOSkuICovCisJaWYgKGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsICZtaWlfMTAwMHRfY3RybF9yZWcpIDwgMCkgeworCQlERUJVR09VVCgiUEhZIFJlYWQgRXJyb3JcbiIpOworCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJfQorCisJLyogTmVlZCB0byBwYXJzZSBib3RoIGF1dG9uZWdfYWR2ZXJ0aXNlZCBhbmQgZmMgYW5kIHNldCB1cAorCSAqIHRoZSBhcHByb3ByaWF0ZSBQSFkgcmVnaXN0ZXJzLiAgRmlyc3Qgd2Ugd2lsbCBwYXJzZSBmb3IKKwkgKiBhdXRvbmVnX2FkdmVydGlzZWQgc29mdHdhcmUgb3ZlcnJpZGUuICBTaW5jZSB3ZSBjYW4gYWR2ZXJ0aXNlCisJICogYSBwbGV0aG9yYSBvZiBjb21iaW5hdGlvbnMsIHdlIG5lZWQgdG8gY2hlY2sgZWFjaCBiaXQKKwkgKiBpbmRpdmlkdWFsbHkuCisJICovCisKKwkvKiBGaXJzdCB3ZSBjbGVhciBhbGwgdGhlIDEwLzEwMCBtYiBzcGVlZCBiaXRzIGluIHRoZSBBdXRvLU5lZworCSAqIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKEFkZHJlc3MgNCkgYW5kIHRoZSAxMDAwIG1iIHNwZWVkIGJpdHMgaW4KKwkgKiB0aGUgIDEwMDBCYXNlLVQgQ29udHJvbCBSZWdpc3RlciAoQWRkcmVzcyA5KS4KKwkgKi8KKwltaWlfYXV0b25lZ19hZHZfcmVnICY9IH5SRUc0X1NQRUVEX01BU0s7CisJbWlpXzEwMDB0X2N0cmxfcmVnICY9IH5SRUc5X1NQRUVEX01BU0s7CisKKwlERUJVR09VVCgiYXV0b25lZ19hZHZlcnRpc2VkICV4XG4iLCBody0+YXV0b25lZ19hZHZlcnRpc2VkKTsKKworCS8qIERvIHdlIHdhbnQgdG8gYWR2ZXJ0aXNlIDEwIE1iIEhhbGYgRHVwbGV4PyAqLworCWlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwX0hBTEYpIHsKKwkJREVCVUdPVVQoIkFkdmVydGlzZSAxMG1iIEhhbGYgZHVwbGV4XG4iKTsKKwkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSBOV0FZX0FSXzEwVF9IRF9DQVBTOworCX0KKworCS8qIERvIHdlIHdhbnQgdG8gYWR2ZXJ0aXNlIDEwIE1iIEZ1bGwgRHVwbGV4PyAqLworCWlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwX0ZVTEwpIHsKKwkJREVCVUdPVVQoIkFkdmVydGlzZSAxMG1iIEZ1bGwgZHVwbGV4XG4iKTsKKwkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSBOV0FZX0FSXzEwVF9GRF9DQVBTOworCX0KKworCS8qIERvIHdlIHdhbnQgdG8gYWR2ZXJ0aXNlIDEwMCBNYiBIYWxmIER1cGxleD8gKi8KKwlpZiAoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRV8xMDBfSEFMRikgeworCQlERUJVR09VVCgiQWR2ZXJ0aXNlIDEwMG1iIEhhbGYgZHVwbGV4XG4iKTsKKwkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSBOV0FZX0FSXzEwMFRYX0hEX0NBUFM7CisJfQorCisJLyogRG8gd2Ugd2FudCB0byBhZHZlcnRpc2UgMTAwIE1iIEZ1bGwgRHVwbGV4PyAqLworCWlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwMF9GVUxMKSB7CisJCURFQlVHT1VUKCJBZHZlcnRpc2UgMTAwbWIgRnVsbCBkdXBsZXhcbiIpOworCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IE5XQVlfQVJfMTAwVFhfRkRfQ0FQUzsKKwl9CisKKwkvKiBXZSBkbyBub3QgYWxsb3cgdGhlIFBoeSB0byBhZHZlcnRpc2UgMTAwMCBNYiBIYWxmIER1cGxleCAqLworCWlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwMDBfSEFMRikgeworCQlERUJVR09VVAorCQkgICAgKCJBZHZlcnRpc2UgMTAwMG1iIEhhbGYgZHVwbGV4IHJlcXVlc3RlZCwgcmVxdWVzdCBkZW5pZWQhXG4iKTsKKwl9CisKKwkvKiBEbyB3ZSB3YW50IHRvIGFkdmVydGlzZSAxMDAwIE1iIEZ1bGwgRHVwbGV4PyAqLworCWlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwMDBfRlVMTCkgeworCQlERUJVR09VVCgiQWR2ZXJ0aXNlIDEwMDBtYiBGdWxsIGR1cGxleFxuIik7CisJCW1paV8xMDAwdF9jdHJsX3JlZyB8PSBDUl8xMDAwVF9GRF9DQVBTOworCX0KKworCS8qIENoZWNrIGZvciBhIHNvZnR3YXJlIG92ZXJyaWRlIG9mIHRoZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MsIGFuZAorCSAqIHNldHVwIHRoZSBQSFkgYWR2ZXJ0aXNlbWVudCByZWdpc3RlcnMgYWNjb3JkaW5nbHkuICBJZgorCSAqIGF1dG8tbmVnb3RpYXRpb24gaXMgZW5hYmxlZCwgdGhlbiBzb2Z0d2FyZSB3aWxsIGhhdmUgdG8gc2V0IHRoZQorCSAqICJQQVVTRSIgYml0cyB0byB0aGUgY29ycmVjdCB2YWx1ZSBpbiB0aGUgQXV0by1OZWdvdGlhdGlvbgorCSAqIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKFBIWV9BVVRPTkVHX0FEVikgYW5kIHJlLXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24uCisJICoKKwkgKiBUaGUgcG9zc2libGUgdmFsdWVzIG9mIHRoZSAiZmMiIHBhcmFtZXRlciBhcmU6CisJICogICAgICAwOiAgRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQKKwkgKiAgICAgIDE6ICBSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHJlY2VpdmUgcGF1c2UgZnJhbWVzCisJICogICAgICAgICAgYnV0IG5vdCBzZW5kIHBhdXNlIGZyYW1lcykuCisJICogICAgICAyOiAgVHggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiBzZW5kIHBhdXNlIGZyYW1lcworCSAqICAgICAgICAgIGJ1dCB3ZSBkbyBub3Qgc3VwcG9ydCByZWNlaXZpbmcgcGF1c2UgZnJhbWVzKS4KKwkgKiAgICAgIDM6ICBCb3RoIFJ4IGFuZCBUWCBmbG93IGNvbnRyb2wgKHN5bW1ldHJpYykgYXJlIGVuYWJsZWQuCisJICogIG90aGVyOiAgTm8gc29mdHdhcmUgb3ZlcnJpZGUuICBUaGUgZmxvdyBjb250cm9sIGNvbmZpZ3VyYXRpb24KKwkgKiAgICAgICAgICBpbiB0aGUgRUVQUk9NIGlzIHVzZWQuCisJICovCisJc3dpdGNoIChody0+ZmMpIHsKKwljYXNlIGUxMDAwX2ZjX25vbmU6CS8qIDAgKi8KKwkJLyogRmxvdyBjb250cm9sIChSWCAmIFRYKSBpcyBjb21wbGV0ZWx5IGRpc2FibGVkIGJ5IGEKKwkJICogc29mdHdhcmUgb3Zlci1yaWRlLgorCQkgKi8KKwkJbWlpX2F1dG9uZWdfYWR2X3JlZyAmPSB+KE5XQVlfQVJfQVNNX0RJUiB8IE5XQVlfQVJfUEFVU0UpOworCQlicmVhazsKKwljYXNlIGUxMDAwX2ZjX3J4X3BhdXNlOgkvKiAxICovCisJCS8qIFJYIEZsb3cgY29udHJvbCBpcyBlbmFibGVkLCBhbmQgVFggRmxvdyBjb250cm9sIGlzCisJCSAqIGRpc2FibGVkLCBieSBhIHNvZnR3YXJlIG92ZXItcmlkZS4KKwkJICovCisJCS8qIFNpbmNlIHRoZXJlIHJlYWxseSBpc24ndCBhIHdheSB0byBhZHZlcnRpc2UgdGhhdCB3ZSBhcmUKKwkJICogY2FwYWJsZSBvZiBSWCBQYXVzZSBPTkxZLCB3ZSB3aWxsIGFkdmVydGlzZSB0aGF0IHdlCisJCSAqIHN1cHBvcnQgYm90aCBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgUlggUEFVU0UuICBMYXRlcgorCQkgKiAoaW4gZTEwMDBfY29uZmlnX2ZjX2FmdGVyX2xpbmtfdXApIHdlIHdpbGwgZGlzYWJsZSB0aGUKKwkJICpodydzIGFiaWxpdHkgdG8gc2VuZCBQQVVTRSBmcmFtZXMuCisJCSAqLworCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IChOV0FZX0FSX0FTTV9ESVIgfCBOV0FZX0FSX1BBVVNFKTsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9mY190eF9wYXVzZToJLyogMiAqLworCQkvKiBUWCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJYIEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCwgYnkgYSBzb2Z0d2FyZSBvdmVyLXJpZGUuCisJCSAqLworCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IE5XQVlfQVJfQVNNX0RJUjsKKwkJbWlpX2F1dG9uZWdfYWR2X3JlZyAmPSB+TldBWV9BUl9QQVVTRTsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9mY19mdWxsOgkvKiAzICovCisJCS8qIEZsb3cgY29udHJvbCAoYm90aCBSWCBhbmQgVFgpIGlzIGVuYWJsZWQgYnkgYSBzb2Z0d2FyZQorCQkgKiBvdmVyLXJpZGUuCisJCSAqLworCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IChOV0FZX0FSX0FTTV9ESVIgfCBOV0FZX0FSX1BBVVNFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUdPVVQoIkZsb3cgY29udHJvbCBwYXJhbSBzZXQgaW5jb3JyZWN0bHlcbiIpOworCQlyZXR1cm4gLUUxMDAwX0VSUl9DT05GSUc7CisJfQorCisJaWYgKGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIFBIWV9BVVRPTkVHX0FEViwgbWlpX2F1dG9uZWdfYWR2X3JlZykgPCAwKSB7CisJCURFQlVHT1VUKCJQSFkgV3JpdGUgRXJyb3JcbiIpOworCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJfQorCisJREVCVUdPVVQoIkF1dG8tTmVnIEFkdmVydGlzaW5nICV4XG4iLCBtaWlfYXV0b25lZ19hZHZfcmVnKTsKKworCWlmIChlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgbWlpXzEwMDB0X2N0cmxfcmVnKSA8IDApIHsKKwkJREVCVUdPVVQoIlBIWSBXcml0ZSBFcnJvclxuIik7CisJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU2V0cyB0aGUgY29sbGlzaW9uIGRpc3RhbmNlIGluIHRoZSBUcmFuc21pdCBDb250cm9sIHJlZ2lzdGVyCisqCisqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisqCisqIExpbmsgc2hvdWxkIGhhdmUgYmVlbiBlc3RhYmxpc2hlZCBwcmV2aW91c2x5LiBSZWFkcyB0aGUgc3BlZWQgYW5kIGR1cGxleAorKiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBEZXZpY2UgU3RhdHVzIHJlZ2lzdGVyLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQKK2UxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXVpbnQzMl90IHRjdGw7CisKKwl0Y3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRDVEwpOworCisJdGN0bCAmPSB+RTEwMDBfVENUTF9DT0xEOworCXRjdGwgfD0gRTEwMDBfQ09MTElTSU9OX0RJU1RBTkNFIDw8IEUxMDAwX0NPTERfU0hJRlQ7CisKKwlFMTAwMF9XUklURV9SRUcoaHcsIFRDVEwsIHRjdGwpOworCUUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTZXRzIE1BQyBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzIHRvIHJlZmxlY3QgdGhlIHRob3NlIGluIHRoZSBQSFkKKyoKKyogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyogbWlpX3JlZyAtIGRhdGEgdG8gd3JpdGUgdG8gdGhlIE1JSSBjb250cm9sIHJlZ2lzdGVyCisqCisqIFRoZSBjb250ZW50cyBvZiB0aGUgUEhZIHJlZ2lzdGVyIGNvbnRhaW5pbmcgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbiBuZWVkIHRvCisqIGJlIHBhc3NlZCBpbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQKK2UxMDAwX2NvbmZpZ19tYWNfdG9fcGh5KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdWludDMyX3QgY3RybDsKKwl1aW50MTZfdCBwaHlfZGF0YTsKKworCURFQlVHRlVOQygpOworCisJLyogUmVhZCB0aGUgRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIgYW5kIHNldCB0aGUgYml0cyB0byBGb3JjZSBTcGVlZAorCSAqIGFuZCBEdXBsZXguCisJICovCisJY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKwljdHJsIHw9IChFMTAwMF9DVFJMX0ZSQ1NQRCB8IEUxMDAwX0NUUkxfRlJDRFBYKTsKKwljdHJsICY9IH4oRTEwMDBfQ1RSTF9TUERfU0VMIHwgRTEwMDBfQ1RSTF9JTE9TKTsKKworCS8qIFNldCB1cCBkdXBsZXggaW4gdGhlIERldmljZSBDb250cm9sIGFuZCBUcmFuc21pdCBDb250cm9sCisJICogcmVnaXN0ZXJzIGRlcGVuZGluZyBvbiBuZWdvdGlhdGVkIHZhbHVlcy4KKwkgKi8KKwlpZiAoZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZwaHlfZGF0YSkgPCAwKSB7CisJCURFQlVHT1VUKCJQSFkgUmVhZCBFcnJvclxuIik7CisJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwl9CisJaWYgKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9EUExYKQorCQljdHJsIHw9IEUxMDAwX0NUUkxfRkQ7CisJZWxzZQorCQljdHJsICY9IH5FMTAwMF9DVFJMX0ZEOworCisJZTEwMDBfY29uZmlnX2NvbGxpc2lvbl9kaXN0KGh3KTsKKworCS8qIFNldCB1cCBzcGVlZCBpbiB0aGUgRGV2aWNlIENvbnRyb2wgcmVnaXN0ZXIgZGVwZW5kaW5nIG9uCisJICogbmVnb3RpYXRlZCB2YWx1ZXMuCisJICovCisJaWYgKChwaHlfZGF0YSAmIE04OEUxMDAwX1BTU1JfU1BFRUQpID09IE04OEUxMDAwX1BTU1JfMTAwME1CUykKKwkJY3RybCB8PSBFMTAwMF9DVFJMX1NQRF8xMDAwOworCWVsc2UgaWYgKChwaHlfZGF0YSAmIE04OEUxMDAwX1BTU1JfU1BFRUQpID09IE04OEUxMDAwX1BTU1JfMTAwTUJTKQorCQljdHJsIHw9IEUxMDAwX0NUUkxfU1BEXzEwMDsKKwkvKiBXcml0ZSB0aGUgY29uZmlndXJlZCB2YWx1ZXMgYmFjayB0byB0aGUgRGV2aWNlIENvbnRyb2wgUmVnLiAqLworCUUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgY3RybCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZvcmNlcyB0aGUgTUFDJ3MgZmxvdyBjb250cm9sIHNldHRpbmdzLgorICogCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICoKKyAqIFNldHMgdGhlIFRGQ0UgYW5kIFJGQ0UgYml0cyBpbiB0aGUgZGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIgdG8gcmVmbGVjdAorICogdGhlIGFkYXB0ZXIgc2V0dGluZ3MuIFRGQ0UgYW5kIFJGQ0UgbmVlZCB0byBiZSBleHBsaWNpdGx5IHNldCBieQorICogc29mdHdhcmUgd2hlbiBhIENvcHBlciBQSFkgaXMgdXNlZCBiZWNhdXNlIGF1dG9uZWdvdGlhdGlvbiBpcyBtYW5hZ2VkCisgKiBieSB0aGUgUEhZIHJhdGhlciB0aGFuIHRoZSBNQUMuIFNvZnR3YXJlIG11c3QgYWxzbyBjb25maWd1cmUgdGhlc2UKKyAqIGJpdHMgd2hlbiBsaW5rIGlzIGZvcmNlZCBvbiBhIGZpYmVyIGNvbm5lY3Rpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CitlMTAwMF9mb3JjZV9tYWNfZmMoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1aW50MzJfdCBjdHJsOworCisJREVCVUdGVU5DKCk7CisKKwkvKiBHZXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiB0aGUgRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwljdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOworCisJLyogQmVjYXVzZSB3ZSBkaWRuJ3QgZ2V0IGxpbmsgdmlhIHRoZSBpbnRlcm5hbCBhdXRvLW5lZ290aWF0aW9uCisJICogbWVjaGFuaXNtICh3ZSBlaXRoZXIgZm9yY2VkIGxpbmsgb3Igd2UgZ290IGxpbmsgdmlhIFBIWQorCSAqIGF1dG8tbmVnKSwgd2UgaGF2ZSB0byBtYW51YWxseSBlbmFibGUvZGlzYWJsZSB0cmFuc21pdCBhbgorCSAqIHJlY2VpdmUgZmxvdyBjb250cm9sLgorCSAqCisJICogVGhlICJDYXNlIiBzdGF0ZW1lbnQgYmVsb3cgZW5hYmxlcy9kaXNhYmxlIGZsb3cgY29udHJvbAorCSAqIGFjY29yZGluZyB0byB0aGUgImh3LT5mYyIgcGFyYW1ldGVyLgorCSAqCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgImZjIiBwYXJhbWV0ZXIgYXJlOgorCSAqICAgICAgMDogIEZsb3cgY29udHJvbCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkCisJICogICAgICAxOiAgUnggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiByZWNlaXZlIHBhdXNlCisJICogICAgICAgICAgZnJhbWVzIGJ1dCBub3Qgc2VuZCBwYXVzZSBmcmFtZXMpLgorCSAqICAgICAgMjogIFR4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gc2VuZCBwYXVzZSBmcmFtZXMKKwkgKiAgICAgICAgICBmcmFtZXMgYnV0IHdlIGRvIG5vdCByZWNlaXZlIHBhdXNlIGZyYW1lcykuCisJICogICAgICAzOiAgQm90aCBSeCBhbmQgVFggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGlzIGVuYWJsZWQuCisJICogIG90aGVyOiAgTm8gb3RoZXIgdmFsdWVzIHNob3VsZCBiZSBwb3NzaWJsZSBhdCB0aGlzIHBvaW50LgorCSAqLworCisJc3dpdGNoIChody0+ZmMpIHsKKwljYXNlIGUxMDAwX2ZjX25vbmU6CisJCWN0cmwgJj0gKH4oRTEwMDBfQ1RSTF9URkNFIHwgRTEwMDBfQ1RSTF9SRkNFKSk7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfZmNfcnhfcGF1c2U6CisJCWN0cmwgJj0gKH5FMTAwMF9DVFJMX1RGQ0UpOworCQljdHJsIHw9IEUxMDAwX0NUUkxfUkZDRTsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9mY190eF9wYXVzZToKKwkJY3RybCAmPSAofkUxMDAwX0NUUkxfUkZDRSk7CisJCWN0cmwgfD0gRTEwMDBfQ1RSTF9URkNFOworCQlicmVhazsKKwljYXNlIGUxMDAwX2ZjX2Z1bGw6CisJCWN0cmwgfD0gKEUxMDAwX0NUUkxfVEZDRSB8IEUxMDAwX0NUUkxfUkZDRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQlVHT1VUKCJGbG93IGNvbnRyb2wgcGFyYW0gc2V0IGluY29ycmVjdGx5XG4iKTsKKwkJcmV0dXJuIC1FMTAwMF9FUlJfQ09ORklHOworCX0KKworCS8qIERpc2FibGUgVFggRmxvdyBDb250cm9sIGZvciA4MjU0MiAocmV2IDIuMCkgKi8KKwlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkKKwkJY3RybCAmPSAofkUxMDAwX0NUUkxfVEZDRSk7CisKKwlFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwpOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25maWd1cmVzIGZsb3cgY29udHJvbCBzZXR0aW5ncyBhZnRlciBsaW5rIGlzIGVzdGFibGlzaGVkCisgKiAKKyAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKgorICogU2hvdWxkIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIHZhbGlkIGxpbmsgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCisgKiBGb3JjZXMgTUFDIGZsb3cgY29udHJvbCBzZXR0aW5ncyBpZiBsaW5rIHdhcyBmb3JjZWQuIFdoZW4gaW4gTUlJL0dNSUkgbW9kZQorICogYW5kIGF1dG9uZWdvdGlhdGlvbiBpcyBlbmFibGVkLCB0aGUgTUFDIGZsb3cgY29udHJvbCBzZXR0aW5ncyB3aWxsIGJlIHNldAorICogYmFzZWQgb24gdGhlIGZsb3cgY29udHJvbCBuZWdvdGlhdGVkIGJ5IHRoZSBQSFkuIEluIFRCSSBtb2RlLCB0aGUgVEZDRQorICogYW5kIFJGQ0UgYml0cyB3aWxsIGJlIGF1dG9tYXRpY2FseSBzZXQgdG8gdGhlIG5lZ290aWF0ZWQgZmxvdyBjb250cm9sIG1vZGUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CitlMTAwMF9jb25maWdfZmNfYWZ0ZXJfbGlua191cChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCWludDMyX3QgcmV0X3ZhbDsKKwl1aW50MTZfdCBtaWlfc3RhdHVzX3JlZzsKKwl1aW50MTZfdCBtaWlfbndheV9hZHZfcmVnOworCXVpbnQxNl90IG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnOworCXVpbnQxNl90IHNwZWVkOworCXVpbnQxNl90IGR1cGxleDsKKworCURFQlVHRlVOQygpOworCisJLyogQ2hlY2sgZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgZmliZXIgbWVkaWEgYW5kIGF1dG8tbmVnIGZhaWxlZAorCSAqIHNvIHdlIGhhZCB0byBmb3JjZSBsaW5rLiAgSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGZvcmNlIHRoZQorCSAqIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE1BQyB0byBtYXRjaCB0aGUgImZjIiBwYXJhbWV0ZXIuCisJICovCisJaWYgKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSAmJiAoaHctPmF1dG9uZWdfZmFpbGVkKSkgeworCQlyZXRfdmFsID0gZTEwMDBfZm9yY2VfbWFjX2ZjKGh3KTsKKwkJaWYgKHJldF92YWwgPCAwKSB7CisJCQlERUJVR09VVCgiRXJyb3IgZm9yY2luZyBmbG93IGNvbnRyb2wgc2V0dGluZ3NcbiIpOworCQkJcmV0dXJuIHJldF92YWw7CisJCX0KKwl9CisKKwkvKiBDaGVjayBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBjb3BwZXIgbWVkaWEgYW5kIGF1dG8tbmVnIGlzCisJICogZW5hYmxlZC4gIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBjaGVjayBhbmQgc2VlIGlmIEF1dG8tTmVnCisJICogaGFzIGNvbXBsZXRlZCwgYW5kIGlmIHNvLCBob3cgdGhlIFBIWSBhbmQgbGluayBwYXJ0bmVyIGhhcworCSAqIGZsb3cgY29udHJvbCBjb25maWd1cmVkLgorCSAqLworCWlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgeworCQkvKiBSZWFkIHRoZSBNSUkgU3RhdHVzIFJlZ2lzdGVyIGFuZCBjaGVjayB0byBzZWUgaWYgQXV0b05lZworCQkgKiBoYXMgY29tcGxldGVkLiAgV2UgcmVhZCB0aGlzIHR3aWNlIGJlY2F1c2UgdGhpcyByZWcgaGFzCisJCSAqIHNvbWUgInN0aWNreSIgKGxhdGNoZWQpIGJpdHMuCisJCSAqLworCQlpZiAoZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmbWlpX3N0YXR1c19yZWcpIDwgMCkgeworCQkJREVCVUdPVVQoIlBIWSBSZWFkIEVycm9yIFxuIik7CisJCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJCX0KKwkJaWYgKGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJm1paV9zdGF0dXNfcmVnKSA8IDApIHsKKwkJCURFQlVHT1VUKCJQSFkgUmVhZCBFcnJvciBcbiIpOworCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCQl9CisKKwkJaWYgKG1paV9zdGF0dXNfcmVnICYgTUlJX1NSX0FVVE9ORUdfQ09NUExFVEUpIHsKKwkJCS8qIFRoZSBBdXRvTmVnIHByb2Nlc3MgaGFzIGNvbXBsZXRlZCwgc28gd2Ugbm93IG5lZWQgdG8KKwkJCSAqIHJlYWQgYm90aCB0aGUgQXV0byBOZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyCisJCQkgKiAoQWRkcmVzcyA0KSBhbmQgdGhlIEF1dG9fTmVnb3RpYXRpb24gQmFzZSBQYWdlIEFiaWxpdHkKKwkJCSAqIFJlZ2lzdGVyIChBZGRyZXNzIDUpIHRvIGRldGVybWluZSBob3cgZmxvdyBjb250cm9sIHdhcworCQkJICogbmVnb3RpYXRlZC4KKwkJCSAqLworCQkJaWYgKGUxMDAwX3JlYWRfcGh5X3JlZworCQkJICAgIChodywgUEhZX0FVVE9ORUdfQURWLCAmbWlpX253YXlfYWR2X3JlZykgPCAwKSB7CisJCQkJREVCVUdPVVQoIlBIWSBSZWFkIEVycm9yXG4iKTsKKwkJCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJCQl9CisJCQlpZiAoZTEwMDBfcmVhZF9waHlfcmVnCisJCQkgICAgKGh3LCBQSFlfTFBfQUJJTElUWSwKKwkJCSAgICAgJm1paV9ud2F5X2xwX2FiaWxpdHlfcmVnKSA8IDApIHsKKwkJCQlERUJVR09VVCgiUEhZIFJlYWQgRXJyb3JcbiIpOworCQkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwkJCX0KKworCQkJLyogVHdvIGJpdHMgaW4gdGhlIEF1dG8gTmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudCBSZWdpc3RlcgorCQkJICogKEFkZHJlc3MgNCkgYW5kIHR3byBiaXRzIGluIHRoZSBBdXRvIE5lZ290aWF0aW9uIEJhc2UKKwkJCSAqIFBhZ2UgQWJpbGl0eSBSZWdpc3RlciAoQWRkcmVzcyA1KSBkZXRlcm1pbmUgZmxvdyBjb250cm9sCisJCQkgKiBmb3IgYm90aCB0aGUgUEhZIGFuZCB0aGUgbGluayBwYXJ0bmVyLiAgVGhlIGZvbGxvd2luZworCQkJICogdGFibGUsIHRha2VuIG91dCBvZiB0aGUgSUVFRSA4MDIuM2FiL0Q2LjAgZGF0ZWQgTWFyY2ggMjUsCisJCQkgKiAxOTk5LCBkZXNjcmliZXMgdGhlc2UgUEFVU0UgcmVzb2x1dGlvbiBiaXRzIGFuZCBob3cgZmxvdworCQkJICogY29udHJvbCBpcyBkZXRlcm1pbmVkIGJhc2VkIHVwb24gdGhlc2Ugc2V0dGluZ3MuCisJCQkgKiBOT1RFOiAgREMgPSBEb24ndCBDYXJlCisJCQkgKgorCQkJICogICBMT0NBTCBERVZJQ0UgIHwgICBMSU5LIFBBUlRORVIKKwkJCSAqIFBBVVNFIHwgQVNNX0RJUiB8IFBBVVNFIHwgQVNNX0RJUiB8IE5JQyBSZXNvbHV0aW9uCisJCQkgKi0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkgKiAgIDAgICB8ICAgIDAgICAgfCAgREMgICB8ICAgREMgICAgfCBlMTAwMF9mY19ub25lCisJCQkgKiAgIDAgICB8ICAgIDEgICAgfCAgIDAgICB8ICAgREMgICAgfCBlMTAwMF9mY19ub25lCisJCQkgKiAgIDAgICB8ICAgIDEgICAgfCAgIDEgICB8ICAgIDAgICAgfCBlMTAwMF9mY19ub25lCisJCQkgKiAgIDAgICB8ICAgIDEgICAgfCAgIDEgICB8ICAgIDEgICAgfCBlMTAwMF9mY190eF9wYXVzZQorCQkJICogICAxICAgfCAgICAwICAgIHwgICAwICAgfCAgIERDICAgIHwgZTEwMDBfZmNfbm9uZQorCQkJICogICAxICAgfCAgIERDICAgIHwgICAxICAgfCAgIERDICAgIHwgZTEwMDBfZmNfZnVsbAorCQkJICogICAxICAgfCAgICAxICAgIHwgICAwICAgfCAgICAwICAgIHwgZTEwMDBfZmNfbm9uZQorCQkJICogICAxICAgfCAgICAxICAgIHwgICAwICAgfCAgICAxICAgIHwgZTEwMDBfZmNfcnhfcGF1c2UKKwkJCSAqCisJCQkgKi8KKwkJCS8qIEFyZSBib3RoIFBBVVNFIGJpdHMgc2V0IHRvIDE/ICBJZiBzbywgdGhpcyBpbXBsaWVzCisJCQkgKiBTeW1tZXRyaWMgRmxvdyBDb250cm9sIGlzIGVuYWJsZWQgYXQgYm90aCBlbmRzLiAgVGhlCisJCQkgKiBBU01fRElSIGJpdHMgYXJlIGlycmVsZXZhbnQgcGVyIHRoZSBzcGVjLgorCQkJICoKKwkJCSAqIEZvciBTeW1tZXRyaWMgRmxvdyBDb250cm9sOgorCQkJICoKKwkJCSAqICAgTE9DQUwgREVWSUNFICB8ICAgTElOSyBQQVJUTkVSCisJCQkgKiBQQVVTRSB8IEFTTV9ESVIgfCBQQVVTRSB8IEFTTV9ESVIgfCBSZXN1bHQKKwkJCSAqLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCSAqICAgMSAgIHwgICBEQyAgICB8ICAgMSAgIHwgICBEQyAgICB8IGUxMDAwX2ZjX2Z1bGwKKwkJCSAqCisJCQkgKi8KKwkJCWlmICgobWlpX253YXlfYWR2X3JlZyAmIE5XQVlfQVJfUEFVU0UpICYmCisJCQkgICAgKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX1BBVVNFKSkgeworCQkJCS8qIE5vdyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSB1c2VyIHNlbGVjdGVkIFJYIE9OTFkKKwkJCQkgKiBvZiBwYXVzZSBmcmFtZXMuICBJbiB0aGlzIGNhc2UsIHdlIGhhZCB0byBhZHZlcnRpc2UKKwkJCQkgKiBGVUxMIGZsb3cgY29udHJvbCBiZWNhdXNlIHdlIGNvdWxkIG5vdCBhZHZlcnRpc2UgUlgKKwkJCQkgKiBPTkxZLiBIZW5jZSwgd2UgbXVzdCBub3cgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8KKwkJCQkgKiB0dXJuIE9GRiAgdGhlIFRSQU5TTUlTU0lPTiBvZiBQQVVTRSBmcmFtZXMuCisJCQkJICovCisJCQkJaWYgKGh3LT5vcmlnaW5hbF9mYyA9PSBlMTAwMF9mY19mdWxsKSB7CisJCQkJCWh3LT5mYyA9IGUxMDAwX2ZjX2Z1bGw7CisJCQkJCURFQlVHT1VUKCJGbG93IENvbnRyb2wgPSBGVUxMLlxyXG4iKTsKKwkJCQl9IGVsc2UgeworCQkJCQlody0+ZmMgPSBlMTAwMF9mY19yeF9wYXVzZTsKKwkJCQkJREVCVUdPVVQKKwkJCQkJICAgICgiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOworCQkJCX0KKwkJCX0KKwkJCS8qIEZvciByZWNlaXZpbmcgUEFVU0UgZnJhbWVzIE9OTFkuCisJCQkgKgorCQkJICogICBMT0NBTCBERVZJQ0UgIHwgICBMSU5LIFBBUlRORVIKKwkJCSAqIFBBVVNFIHwgQVNNX0RJUiB8IFBBVVNFIHwgQVNNX0RJUiB8IFJlc3VsdAorCQkJICotLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJICogICAwICAgfCAgICAxICAgIHwgICAxICAgfCAgICAxICAgIHwgZTEwMDBfZmNfdHhfcGF1c2UKKwkJCSAqCisJCQkgKi8KKwkJCWVsc2UgaWYgKCEobWlpX253YXlfYWR2X3JlZyAmIE5XQVlfQVJfUEFVU0UpICYmCisJCQkJIChtaWlfbndheV9hZHZfcmVnICYgTldBWV9BUl9BU01fRElSKSAmJgorCQkJCSAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfUEFVU0UpICYmCisJCQkJIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9BU01fRElSKSkKKwkJCXsKKwkJCQlody0+ZmMgPSBlMTAwMF9mY190eF9wYXVzZTsKKwkJCQlERUJVR09VVAorCQkJCSAgICAoIkZsb3cgQ29udHJvbCA9IFRYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKKwkJCX0KKwkJCS8qIEZvciB0cmFuc21pdHRpbmcgUEFVU0UgZnJhbWVzIE9OTFkuCisJCQkgKgorCQkJICogICBMT0NBTCBERVZJQ0UgIHwgICBMSU5LIFBBUlRORVIKKwkJCSAqIFBBVVNFIHwgQVNNX0RJUiB8IFBBVVNFIHwgQVNNX0RJUiB8IFJlc3VsdAorCQkJICotLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJICogICAxICAgfCAgICAxICAgIHwgICAwICAgfCAgICAxICAgIHwgZTEwMDBfZmNfcnhfcGF1c2UKKwkJCSAqCisJCQkgKi8KKwkJCWVsc2UgaWYgKChtaWlfbndheV9hZHZfcmVnICYgTldBWV9BUl9QQVVTRSkgJiYKKwkJCQkgKG1paV9ud2F5X2Fkdl9yZWcgJiBOV0FZX0FSX0FTTV9ESVIpICYmCisJCQkJICEobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfUEFVU0UpICYmCisJCQkJIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9BU01fRElSKSkKKwkJCXsKKwkJCQlody0+ZmMgPSBlMTAwMF9mY19yeF9wYXVzZTsKKwkJCQlERUJVR09VVAorCQkJCSAgICAoIkZsb3cgQ29udHJvbCA9IFJYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKKwkJCX0KKwkJCS8qIFBlciB0aGUgSUVFRSBzcGVjLCBhdCB0aGlzIHBvaW50IGZsb3cgY29udHJvbCBzaG91bGQgYmUKKwkJCSAqIGRpc2FibGVkLiAgSG93ZXZlciwgd2Ugd2FudCB0byBjb25zaWRlciB0aGF0IHdlIGNvdWxkCisJCQkgKiBiZSBjb25uZWN0ZWQgdG8gYSBsZWdhY3kgc3dpdGNoIHRoYXQgZG9lc24ndCBhZHZlcnRpc2UKKwkJCSAqIGRlc2lyZWQgZmxvdyBjb250cm9sLCBidXQgY2FuIGJlIGZvcmNlZCBvbiB0aGUgbGluaworCQkJICogcGFydG5lci4gIFNvIGlmIHdlIGFkdmVydGlzZWQgbm8gZmxvdyBjb250cm9sLCB0aGF0IGlzCisJCQkgKiB3aGF0IHdlIHdpbGwgcmVzb2x2ZSB0by4gIElmIHdlIGFkdmVydGlzZWQgc29tZSBraW5kIG9mCisJCQkgKiByZWNlaXZlIGNhcGFiaWxpdHkgKFJ4IFBhdXNlIE9ubHkgb3IgRnVsbCBGbG93IENvbnRyb2wpCisJCQkgKiBhbmQgdGhlIGxpbmsgcGFydG5lciBhZHZlcnRpc2VkIG5vbmUsIHdlIHdpbGwgY29uZmlndXJlCisJCQkgKiBvdXJzZWx2ZXMgdG8gZW5hYmxlIFJ4IEZsb3cgQ29udHJvbCBvbmx5LiAgV2UgY2FuIGRvCisJCQkgKiB0aGlzIHNhZmVseSBmb3IgdHdvIHJlYXNvbnM6ICBJZiB0aGUgbGluayBwYXJ0bmVyIHJlYWxseQorCQkJICogZGlkbid0IHdhbnQgZmxvdyBjb250cm9sIGVuYWJsZWQsIGFuZCB3ZSBlbmFibGUgUngsIG5vCisJCQkgKiBoYXJtIGRvbmUgc2luY2Ugd2Ugd29uJ3QgYmUgcmVjZWl2aW5nIGFueSBQQVVTRSBmcmFtZXMKKwkJCSAqIGFueXdheS4gIElmIHRoZSBpbnRlbnQgb24gdGhlIGxpbmsgcGFydG5lciB3YXMgdG8gaGF2ZQorCQkJICogZmxvdyBjb250cm9sIGVuYWJsZWQsIHRoZW4gYnkgdXMgZW5hYmxpbmcgUlggb25seSwgd2UKKwkJCSAqIGNhbiBhdCBsZWFzdCByZWNlaXZlIHBhdXNlIGZyYW1lcyBhbmQgcHJvY2VzcyB0aGVtLgorCQkJICogVGhpcyBpcyBhIGdvb2QgaWRlYSBiZWNhdXNlIGluIG1vc3QgY2FzZXMsIHNpbmNlIHdlIGFyZQorCQkJICogcHJlZG9taW5hbnRseSBhIHNlcnZlciBOSUMsIG1vcmUgdGltZXMgdGhhbiBub3Qgd2Ugd2lsbAorCQkJICogYmUgYXNrZWQgdG8gZGVsYXkgdHJhbnNtaXNzaW9uIG9mIHBhY2tldHMgdGhhbiBhc2tpbmcKKwkJCSAqIG91ciBsaW5rIHBhcnRuZXIgdG8gcGF1c2UgdHJhbnNtaXNzaW9uIG9mIGZyYW1lcy4KKwkJCSAqLworCQkJZWxzZSBpZiAoaHctPm9yaWdpbmFsX2ZjID09IGUxMDAwX2ZjX25vbmUgfHwKKwkJCQkgaHctPm9yaWdpbmFsX2ZjID09IGUxMDAwX2ZjX3R4X3BhdXNlKSB7CisJCQkJaHctPmZjID0gZTEwMDBfZmNfbm9uZTsKKwkJCQlERUJVR09VVCgiRmxvdyBDb250cm9sID0gTk9ORS5cclxuIik7CisJCQl9IGVsc2UgeworCQkJCWh3LT5mYyA9IGUxMDAwX2ZjX3J4X3BhdXNlOworCQkJCURFQlVHT1VUCisJCQkJICAgICgiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOworCQkJfQorCisJCQkvKiBOb3cgd2UgbmVlZCB0byBkbyBvbmUgbGFzdCBjaGVjay4uLiAgSWYgd2UgYXV0by0KKwkJCSAqIG5lZ290aWF0ZWQgdG8gSEFMRiBEVVBMRVgsIGZsb3cgY29udHJvbCBzaG91bGQgbm90IGJlCisJCQkgKiBlbmFibGVkIHBlciBJRUVFIDgwMi4zIHNwZWMuCisJCQkgKi8KKwkJCWUxMDAwX2dldF9zcGVlZF9hbmRfZHVwbGV4KGh3LCAmc3BlZWQsICZkdXBsZXgpOworCisJCQlpZiAoZHVwbGV4ID09IEhBTEZfRFVQTEVYKQorCQkJCWh3LT5mYyA9IGUxMDAwX2ZjX25vbmU7CisKKwkJCS8qIE5vdyB3ZSBjYWxsIGEgc3Vicm91dGluZSB0byBhY3R1YWxseSBmb3JjZSB0aGUgTUFDCisJCQkgKiBjb250cm9sbGVyIHRvIHVzZSB0aGUgY29ycmVjdCBmbG93IGNvbnRyb2wgc2V0dGluZ3MuCisJCQkgKi8KKwkJCXJldF92YWwgPSBlMTAwMF9mb3JjZV9tYWNfZmMoaHcpOworCQkJaWYgKHJldF92YWwgPCAwKSB7CisJCQkJREVCVUdPVVQKKwkJCQkgICAgKCJFcnJvciBmb3JjaW5nIGZsb3cgY29udHJvbCBzZXR0aW5nc1xuIik7CisJCQkJcmV0dXJuIHJldF92YWw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlERUJVR09VVAorCQkJICAgICgiQ29wcGVyIFBIWSBhbmQgQXV0byBOZWcgaGFzIG5vdCBjb21wbGV0ZWQuXHJcbiIpOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDaGVja3MgdG8gc2VlIGlmIHRoZSBsaW5rIHN0YXR1cyBvZiB0aGUgaGFyZHdhcmUgaGFzIGNoYW5nZWQuCisgKgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqCisgKiBDYWxsZWQgYnkgYW55IGZ1bmN0aW9uIHRoYXQgbmVlZHMgdG8gY2hlY2sgdGhlIGxpbmsgc3RhdHVzIG9mIHRoZSBhZGFwdGVyLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorZTEwMDBfY2hlY2tfZm9yX2xpbmsoc3RydWN0IGV0aF9kZXZpY2UgKm5pYykKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gbmljLT5wcml2OworCXVpbnQzMl90IHJ4Y3c7CisJdWludDMyX3QgY3RybDsKKwl1aW50MzJfdCBzdGF0dXM7CisJdWludDMyX3QgcmN0bDsKKwl1aW50MzJfdCBzaWduYWw7CisJaW50MzJfdCByZXRfdmFsOworCXVpbnQxNl90IHBoeV9kYXRhOworCXVpbnQxNl90IGxwX2NhcGFiaWxpdHk7CisKKwlERUJVR0ZVTkMoKTsKKworCS8qIE9uIGFkYXB0ZXJzIHdpdGggYSBNQUMgbmV3ZXIgdGhhdCA4MjU0NCwgU1cgRGVmaW5lYWJsZSBwaW4gMSB3aWxsIGJlIAorCSAqIHNldCB3aGVuIHRoZSBvcHRpY3MgZGV0ZWN0IGEgc2lnbmFsLiBPbiBvbGRlciBhZGFwdGVycywgaXQgd2lsbCBiZSAKKwkgKiBjbGVhcmVkIHdoZW4gdGhlcmUgaXMgYSBzaWduYWwKKwkgKi8KKwljdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOworCWlmICgoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDQpICYmICEoY3RybCAmIEUxMDAwX0NUUkxfSUxPUykpCisJCXNpZ25hbCA9IEUxMDAwX0NUUkxfU1dEUElOMTsKKwllbHNlCisJCXNpZ25hbCA9IDA7CisKKwlzdGF0dXMgPSBFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKTsKKwlyeGN3ID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJYQ1cpOworCURFQlVHT1VUKCJjdHJsOiAlIzA4eCBzdGF0dXMgJSMwOHggcnhjdyAlIzA4eFxuIiwgY3RybCwgc3RhdHVzLCByeGN3KTsKKworCS8qIElmIHdlIGhhdmUgYSBjb3BwZXIgUEhZIHRoZW4gd2Ugb25seSB3YW50IHRvIGdvIG91dCB0byB0aGUgUEhZCisJICogcmVnaXN0ZXJzIHRvIHNlZSBpZiBBdXRvLU5lZyBoYXMgY29tcGxldGVkIGFuZC9vciBpZiBvdXIgbGluaworCSAqIHN0YXR1cyBoYXMgY2hhbmdlZC4gIFRoZSBnZXRfbGlua19zdGF0dXMgZmxhZyB3aWxsIGJlIHNldCBpZiB3ZQorCSAqIHJlY2VpdmUgYSBMaW5rIFN0YXR1cyBDaGFuZ2UgaW50ZXJydXB0IG9yIHdlIGhhdmUgUnggU2VxdWVuY2UKKwkgKiBFcnJvcnMuCisJICovCisJaWYgKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgJiYgaHctPmdldF9saW5rX3N0YXR1cykgeworCQkvKiBGaXJzdCB3ZSB3YW50IHRvIHNlZSBpZiB0aGUgTUlJIFN0YXR1cyBSZWdpc3RlciByZXBvcnRzCisJCSAqIGxpbmsuICBJZiBzbywgdGhlbiB3ZSB3YW50IHRvIGdldCB0aGUgY3VycmVudCBzcGVlZC9kdXBsZXgKKwkJICogb2YgdGhlIFBIWS4KKwkJICogUmVhZCB0aGUgcmVnaXN0ZXIgdHdpY2Ugc2luY2UgdGhlIGxpbmsgYml0IGlzIHN0aWNreS4KKwkJICovCisJCWlmIChlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfZGF0YSkgPCAwKSB7CisJCQlERUJVR09VVCgiUEhZIFJlYWQgRXJyb3JcbiIpOworCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCQl9CisJCWlmIChlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfZGF0YSkgPCAwKSB7CisJCQlERUJVR09VVCgiUEhZIFJlYWQgRXJyb3JcbiIpOworCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCQl9CisKKwkJaWYgKHBoeV9kYXRhICYgTUlJX1NSX0xJTktfU1RBVFVTKSB7CisJCQlody0+Z2V0X2xpbmtfc3RhdHVzID0gRkFMU0U7CisJCX0gZWxzZSB7CisJCQkvKiBObyBsaW5rIGRldGVjdGVkICovCisJCQlyZXR1cm4gLUUxMDAwX0VSUl9OT0xJTks7CisJCX0KKworCQkvKiBXZSBoYXZlIGEgTTg4RTEwMDAgUEhZIGFuZCBBdXRvLU5lZyBpcyBlbmFibGVkLiAgSWYgd2UKKwkJICogaGF2ZSBTaSBvbiBib2FyZCB0aGF0IGlzIDgyNTQ0IG9yIG5ld2VyLCBBdXRvCisJCSAqIFNwZWVkIERldGVjdGlvbiB0YWtlcyBjYXJlIG9mIE1BQyBzcGVlZC9kdXBsZXgKKwkJICogY29uZmlndXJhdGlvbi4gIFNvIHdlIG9ubHkgbmVlZCB0byBjb25maWd1cmUgQ29sbGlzaW9uCisJCSAqIERpc3RhbmNlIGluIHRoZSBNQUMuICBPdGhlcndpc2UsIHdlIG5lZWQgdG8gZm9yY2UKKwkJICogc3BlZWQvZHVwbGV4IG9uIHRoZSBNQUMgdG8gdGhlIGN1cnJlbnQgUEhZIHNwZWVkL2R1cGxleAorCQkgKiBzZXR0aW5ncy4KKwkJICovCisJCWlmIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDQpCisJCQllMTAwMF9jb25maWdfY29sbGlzaW9uX2Rpc3QoaHcpOworCQllbHNlIHsKKwkJCXJldF92YWwgPSBlMTAwMF9jb25maWdfbWFjX3RvX3BoeShodyk7CisJCQlpZiAocmV0X3ZhbCA8IDApIHsKKwkJCQlERUJVR09VVAorCQkJCSAgICAoIkVycm9yIGNvbmZpZ3VyaW5nIE1BQyB0byBQSFkgc2V0dGluZ3NcbiIpOworCQkJCXJldHVybiByZXRfdmFsOworCQkJfQorCQl9CisKKwkJLyogQ29uZmlndXJlIEZsb3cgQ29udHJvbCBub3cgdGhhdCBBdXRvLU5lZyBoYXMgY29tcGxldGVkLiBGaXJzdCwgd2UgCisJCSAqIG5lZWQgdG8gcmVzdG9yZSB0aGUgZGVzaXJlZCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgYmVjYXVzZSB3ZSBtYXkKKwkJICogaGF2ZSBoYWQgdG8gcmUtYXV0b25lZyB3aXRoIGEgZGlmZmVyZW50IGxpbmsgcGFydG5lci4KKwkJICovCisJCXJldF92YWwgPSBlMTAwMF9jb25maWdfZmNfYWZ0ZXJfbGlua191cChodyk7CisJCWlmIChyZXRfdmFsIDwgMCkgeworCQkJREVCVUdPVVQoIkVycm9yIGNvbmZpZ3VyaW5nIGZsb3cgY29udHJvbFxuIik7CisJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJfQorCisJCS8qIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHdlIGFyZSBvbiBjb3BwZXIgYW5kIHdlIGhhdmUKKwkJICogYXV0by1uZWdvdGlhdGVkIGxpbmsuICBUaGVzZSBhcmUgY29uZGl0aW9ucyBmb3IgY2hlY2tpbmcgdGhlIGxpbmsKKwkJICogcGFydGVyIGNhcGFiaWxpdHkgcmVnaXN0ZXIuICBXZSB1c2UgdGhlIGxpbmsgcGFydG5lciBjYXBhYmlsaXR5IHRvCisJCSAqIGRldGVybWluZSBpZiBUQkkgQ29tcGF0aWJpbGl0eSBuZWVkcyB0byBiZSB0dXJuZWQgb24gb3Igb2ZmLiAgSWYKKwkJICogdGhlIGxpbmsgcGFydG5lciBhZHZlcnRpc2VzIGFueSBzcGVlZCBpbiBhZGRpdGlvbiB0byBHaWdhYml0LCB0aGVuCisJCSAqIHdlIGFzc3VtZSB0aGF0IHRoZXkgYXJlIEdNSUktYmFzZWQsIGFuZCBUQkkgY29tcGF0aWJpbGl0eSBpcyBub3QKKwkJICogbmVlZGVkLiBJZiBubyBvdGhlciBzcGVlZHMgYXJlIGFkdmVydGlzZWQsIHdlIGFzc3VtZSB0aGUgbGluaworCQkgKiBwYXJ0bmVyIGlzIFRCSS1iYXNlZCwgYW5kIHdlIHR1cm4gb24gVEJJIENvbXBhdGliaWxpdHkuCisJCSAqLworCQlpZiAoaHctPnRiaV9jb21wYXRpYmlsaXR5X2VuKSB7CisJCQlpZiAoZTEwMDBfcmVhZF9waHlfcmVnCisJCQkgICAgKGh3LCBQSFlfTFBfQUJJTElUWSwgJmxwX2NhcGFiaWxpdHkpIDwgMCkgeworCQkJCURFQlVHT1VUKCJQSFkgUmVhZCBFcnJvclxuIik7CisJCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCQkJfQorCQkJaWYgKGxwX2NhcGFiaWxpdHkgJiAoTldBWV9MUEFSXzEwVF9IRF9DQVBTIHwKKwkJCQkJICAgICBOV0FZX0xQQVJfMTBUX0ZEX0NBUFMgfAorCQkJCQkgICAgIE5XQVlfTFBBUl8xMDBUWF9IRF9DQVBTIHwKKwkJCQkJICAgICBOV0FZX0xQQVJfMTAwVFhfRkRfQ0FQUyB8CisJCQkJCSAgICAgTldBWV9MUEFSXzEwMFQ0X0NBUFMpKSB7CisJCQkJLyogSWYgb3VyIGxpbmsgcGFydG5lciBhZHZlcnRpc2VzIGFueXRoaW5nIGluIGFkZGl0aW9uIHRvIAorCQkJCSAqIGdpZ2FiaXQsIHdlIGRvIG5vdCBuZWVkIHRvIGVuYWJsZSBUQkkgY29tcGF0aWJpbGl0eS4KKwkJCQkgKi8KKwkJCQlpZiAoaHctPnRiaV9jb21wYXRpYmlsaXR5X29uKSB7CisJCQkJCS8qIElmIHdlIHByZXZpb3VzbHkgd2VyZSBpbiB0aGUgbW9kZSwgdHVybiBpdCBvZmYuICovCisJCQkJCXJjdGwgPSBFMTAwMF9SRUFEX1JFRyhodywgUkNUTCk7CisJCQkJCXJjdGwgJj0gfkUxMDAwX1JDVExfU0JQOworCQkJCQlFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwpOworCQkJCQlody0+dGJpX2NvbXBhdGliaWxpdHlfb24gPSBGQUxTRTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIElmIFRCSSBjb21wYXRpYmlsaXR5IGlzIHdhcyBwcmV2aW91c2x5IG9mZiwgdHVybiBpdCBvbi4gRm9yCisJCQkJICogY29tcGF0aWJpbGl0eSB3aXRoIGEgVEJJIGxpbmsgcGFydG5lciwgd2Ugd2lsbCBzdG9yZSBiYWQKKwkJCQkgKiBwYWNrZXRzLiBTb21lIGZyYW1lcyBoYXZlIGFuIGFkZGl0aW9uYWwgYnl0ZSBvbiB0aGUgZW5kIGFuZAorCQkJCSAqIHdpbGwgbG9vayBsaWtlIENSQyBlcnJvcnMgdG8gdG8gdGhlIGhhcmR3YXJlLgorCQkJCSAqLworCQkJCWlmICghaHctPnRiaV9jb21wYXRpYmlsaXR5X29uKSB7CisJCQkJCWh3LT50YmlfY29tcGF0aWJpbGl0eV9vbiA9IFRSVUU7CisJCQkJCXJjdGwgPSBFMTAwMF9SRUFEX1JFRyhodywgUkNUTCk7CisJCQkJCXJjdGwgfD0gRTEwMDBfUkNUTF9TQlA7CisJCQkJCUUxMDAwX1dSSVRFX1JFRyhodywgUkNUTCwgcmN0bCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCS8qIElmIHdlIGRvbid0IGhhdmUgbGluayAoYXV0by1uZWdvdGlhdGlvbiBmYWlsZWQgb3IgbGluayBwYXJ0bmVyIGNhbm5vdAorCSAqIGF1dG8tbmVnb3RpYXRlKSwgdGhlIGNhYmxlIGlzIHBsdWdnZWQgaW4gKHdlIGhhdmUgc2lnbmFsKSwgYW5kIG91cgorCSAqIGxpbmsgcGFydG5lciBpcyBub3QgdHJ5aW5nIHRvIGF1dG8tbmVnb3RpYXRlIHdpdGggdXMgKHdlIGFyZSByZWNlaXZpbmcKKwkgKiBpZGxlcyBvciBkYXRhKSwgd2UgbmVlZCB0byBmb3JjZSBsaW5rIHVwLiBXZSBhbHNvIG5lZWQgdG8gZ2l2ZQorCSAqIGF1dG8tbmVnb3RpYXRpb24gdGltZSB0byBjb21wbGV0ZSwgaW4gY2FzZSB0aGUgY2FibGUgd2FzIGp1c3QgcGx1Z2dlZAorCSAqIGluLiBUaGUgYXV0b25lZ19mYWlsZWQgZmxhZyBkb2VzIHRoaXMuCisJICovCisJZWxzZSBpZiAoKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpICYmCisJCSAoIShzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpKSAmJgorCQkgKChjdHJsICYgRTEwMDBfQ1RSTF9TV0RQSU4xKSA9PSBzaWduYWwpICYmCisJCSAoIShyeGN3ICYgRTEwMDBfUlhDV19DKSkpIHsKKwkJaWYgKGh3LT5hdXRvbmVnX2ZhaWxlZCA9PSAwKSB7CisJCQlody0+YXV0b25lZ19mYWlsZWQgPSAxOworCQkJcmV0dXJuIDA7CisJCX0KKwkJREVCVUdPVVQoIk5PVCBSWGluZyAvQy8sIGRpc2FibGUgQXV0b05lZyBhbmQgZm9yY2UgbGluay5cclxuIik7CisKKwkJLyogRGlzYWJsZSBhdXRvLW5lZ290aWF0aW9uIGluIHRoZSBUWENXIHJlZ2lzdGVyICovCisJCUUxMDAwX1dSSVRFX1JFRyhodywgVFhDVywgKGh3LT50eGN3ICYgfkUxMDAwX1RYQ1dfQU5FKSk7CisKKwkJLyogRm9yY2UgbGluay11cCBhbmQgYWxzbyBmb3JjZSBmdWxsLWR1cGxleC4gKi8KKwkJY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKwkJY3RybCB8PSAoRTEwMDBfQ1RSTF9TTFUgfCBFMTAwMF9DVFJMX0ZEKTsKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKKworCQkvKiBDb25maWd1cmUgRmxvdyBDb250cm9sIGFmdGVyIGZvcmNpbmcgbGluayB1cC4gKi8KKwkJcmV0X3ZhbCA9IGUxMDAwX2NvbmZpZ19mY19hZnRlcl9saW5rX3VwKGh3KTsKKwkJaWYgKHJldF92YWwgPCAwKSB7CisJCQlERUJVR09VVCgiRXJyb3IgY29uZmlndXJpbmcgZmxvdyBjb250cm9sXG4iKTsKKwkJCXJldHVybiByZXRfdmFsOworCQl9CisJfQorCS8qIElmIHdlIGFyZSBmb3JjaW5nIGxpbmsgYW5kIHdlIGFyZSByZWNlaXZpbmcgL0MvIG9yZGVyZWQgc2V0cywgcmUtZW5hYmxlCisJICogYXV0by1uZWdvdGlhdGlvbiBpbiB0aGUgVFhDVyByZWdpc3RlciBhbmQgZGlzYWJsZSBmb3JjZWQgbGluayBpbiB0aGUKKwkgKiBEZXZpY2UgQ29udHJvbCByZWdpc3RlciBpbiBhbiBhdHRlbXB0IHRvIGF1dG8tbmVnb3RpYXRlIHdpdGggb3VyIGxpbmsKKwkgKiBwYXJ0bmVyLgorCSAqLworCWVsc2UgaWYgKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSAmJgorCQkgKGN0cmwgJiBFMTAwMF9DVFJMX1NMVSkgJiYgKHJ4Y3cgJiBFMTAwMF9SWENXX0MpKSB7CisJCURFQlVHT1VUCisJCSAgICAoIlJYaW5nIC9DLywgZW5hYmxlIEF1dG9OZWcgYW5kIHN0b3AgZm9yY2luZyBsaW5rLlxyXG4iKTsKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBUWENXLCBody0+dHhjdyk7CisJCUUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgKGN0cmwgJiB+RTEwMDBfQ1RSTF9TTFUpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERldGVjdHMgdGhlIGN1cnJlbnQgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5ncyBvZiB0aGUgaGFyZHdhcmUuCisgKgorICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyAqIHNwZWVkIC0gU3BlZWQgb2YgdGhlIGNvbm5lY3Rpb24KKyAqIGR1cGxleCAtIER1cGxleCBzZXR0aW5nIG9mIHRoZSBjb25uZWN0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAorZTEwMDBfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoc3RydWN0IGUxMDAwX2h3ICpodywKKwkJCSAgIHVpbnQxNl90ICogc3BlZWQsIHVpbnQxNl90ICogZHVwbGV4KQoreworCXVpbnQzMl90IHN0YXR1czsKKworCURFQlVHRlVOQygpOworCisJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MykgeworCQlzdGF0dXMgPSBFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKTsKKwkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19TUEVFRF8xMDAwKSB7CisJCQkqc3BlZWQgPSBTUEVFRF8xMDAwOworCQkJREVCVUdPVVQoIjEwMDAgTWJzLCAiKTsKKwkJfSBlbHNlIGlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfU1BFRURfMTAwKSB7CisJCQkqc3BlZWQgPSBTUEVFRF8xMDA7CisJCQlERUJVR09VVCgiMTAwIE1icywgIik7CisJCX0gZWxzZSB7CisJCQkqc3BlZWQgPSBTUEVFRF8xMDsKKwkJCURFQlVHT1VUKCIxMCBNYnMsICIpOworCQl9CisKKwkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19GRCkgeworCQkJKmR1cGxleCA9IEZVTExfRFVQTEVYOworCQkJREVCVUdPVVQoIkZ1bGwgRHVwbGV4XHJcbiIpOworCQl9IGVsc2UgeworCQkJKmR1cGxleCA9IEhBTEZfRFVQTEVYOworCQkJREVCVUdPVVQoIiBIYWxmIER1cGxleFxyXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCURFQlVHT1VUKCIxMDAwIE1icywgRnVsbCBEdXBsZXhcclxuIik7CisJCSpzcGVlZCA9IFNQRUVEXzEwMDA7CisJCSpkdXBsZXggPSBGVUxMX0RVUExFWDsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQmxvY2tzIHVudGlsIGF1dG9uZWcgY29tcGxldGVzIG9yIHRpbWVzIG91dCAofjQuNSBzZWNvbmRzKQorKgorKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorZTEwMDBfd2FpdF9hdXRvbmVnKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdWludDE2X3QgaTsKKwl1aW50MTZfdCBwaHlfZGF0YTsKKworCURFQlVHRlVOQygpOworCURFQlVHT1VUKCJXYWl0aW5nIGZvciBBdXRvLU5lZyB0byBjb21wbGV0ZS5cbiIpOworCisJLyogV2Ugd2lsbCB3YWl0IGZvciBhdXRvbmVnIHRvIGNvbXBsZXRlIG9yIDQuNSBzZWNvbmRzIHRvIGV4cGlyZS4gKi8KKwlmb3IgKGkgPSBQSFlfQVVUT19ORUdfVElNRTsgaSA+IDA7IGktLSkgeworCQkvKiBSZWFkIHRoZSBNSUkgU3RhdHVzIFJlZ2lzdGVyIGFuZCB3YWl0IGZvciBBdXRvLU5lZworCQkgKiBDb21wbGV0ZSBiaXQgdG8gYmUgc2V0LgorCQkgKi8KKwkJaWYgKGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9kYXRhKSA8IDApIHsKKwkJCURFQlVHT1VUKCJQSFkgUmVhZCBFcnJvclxuIik7CisJCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJCX0KKwkJaWYgKGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9kYXRhKSA8IDApIHsKKwkJCURFQlVHT1VUKCJQSFkgUmVhZCBFcnJvclxuIik7CisJCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJCX0KKwkJaWYgKHBoeV9kYXRhICYgTUlJX1NSX0FVVE9ORUdfQ09NUExFVEUpIHsKKwkJCURFQlVHT1VUKCJBdXRvLU5lZyBjb21wbGV0ZS5cbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbWRlbGF5KDEwMCk7CisJfQorCURFQlVHT1VUKCJBdXRvLU5lZyB0aW1lZG91dC5cbiIpOworCXJldHVybiAtRTEwMDBfRVJSX1RJTUVPVVQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUmFpc2VzIHRoZSBNYW5hZ2VtZW50IERhdGEgQ2xvY2sKKyoKKyogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyogY3RybCAtIERldmljZSBjb250cm9sIHJlZ2lzdGVyJ3MgY3VycmVudCB2YWx1ZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQKK2UxMDAwX3JhaXNlX21kaV9jbGsoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgKiBjdHJsKQoreworCS8qIFJhaXNlIHRoZSBjbG9jayBpbnB1dCB0byB0aGUgTWFuYWdlbWVudCBEYXRhIENsb2NrIChieSBzZXR0aW5nIHRoZSBNREMKKwkgKiBiaXQpLCBhbmQgdGhlbiBkZWxheSAyIG1pY3Jvc2Vjb25kcy4KKwkgKi8KKwlFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsICgqY3RybCB8IEUxMDAwX0NUUkxfTURDKSk7CisJRTEwMDBfV1JJVEVfRkxVU0goaHcpOworCXVkZWxheSgyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBMb3dlcnMgdGhlIE1hbmFnZW1lbnQgRGF0YSBDbG9jaworKgorKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorKiBjdHJsIC0gRGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIncyBjdXJyZW50IHZhbHVlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAorZTEwMDBfbG93ZXJfbWRpX2NsayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCAqIGN0cmwpCit7CisJLyogTG93ZXIgdGhlIGNsb2NrIGlucHV0IHRvIHRoZSBNYW5hZ2VtZW50IERhdGEgQ2xvY2sgKGJ5IGNsZWFyaW5nIHRoZSBNREMKKwkgKiBiaXQpLCBhbmQgdGhlbiBkZWxheSAyIG1pY3Jvc2Vjb25kcy4KKwkgKi8KKwlFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsICgqY3RybCAmIH5FMTAwMF9DVFJMX01EQykpOworCUUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKwl1ZGVsYXkoMik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU2hpZnRzIGRhdGEgYml0cyBvdXQgdG8gdGhlIFBIWQorKgorKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorKiBkYXRhIC0gRGF0YSB0byBzZW5kIG91dCB0byB0aGUgUEhZCisqIGNvdW50IC0gTnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgb3V0CisqCisqIEJpdHMgYXJlIHNoaWZ0ZWQgb3V0IGluIE1TQiB0byBMU0Igb3JkZXIuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAorZTEwMDBfc2hpZnRfb3V0X21kaV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGRhdGEsIHVpbnQxNl90IGNvdW50KQoreworCXVpbnQzMl90IGN0cmw7CisJdWludDMyX3QgbWFzazsKKworCS8qIFdlIG5lZWQgdG8gc2hpZnQgImNvdW50IiBudW1iZXIgb2YgYml0cyBvdXQgdG8gdGhlIFBIWS4gU28sIHRoZSB2YWx1ZQorCSAqIGluIHRoZSAiZGF0YSIgcGFyYW1ldGVyIHdpbGwgYmUgc2hpZnRlZCBvdXQgdG8gdGhlIFBIWSBvbmUgYml0IGF0IGEgCisJICogdGltZS4gSW4gb3JkZXIgdG8gZG8gdGhpcywgImRhdGEiIG11c3QgYmUgYnJva2VuIGRvd24gaW50byBiaXRzLgorCSAqLworCW1hc2sgPSAweDAxOworCW1hc2sgPDw9IChjb3VudCAtIDEpOworCisJY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKKworCS8qIFNldCBNRElPX0RJUiBhbmQgTURDX0RJUiBkaXJlY3Rpb24gYml0cyB0byBiZSB1c2VkIGFzIG91dHB1dCBwaW5zLiAqLworCWN0cmwgfD0gKEUxMDAwX0NUUkxfTURJT19ESVIgfCBFMTAwMF9DVFJMX01EQ19ESVIpOworCisJd2hpbGUgKG1hc2spIHsKKwkJLyogQSAiMSIgaXMgc2hpZnRlZCBvdXQgdG8gdGhlIFBIWSBieSBzZXR0aW5nIHRoZSBNRElPIGJpdCB0byAiMSIgYW5kCisJCSAqIHRoZW4gcmFpc2luZyBhbmQgbG93ZXJpbmcgdGhlIE1hbmFnZW1lbnQgRGF0YSBDbG9jay4gQSAiMCIgaXMKKwkJICogc2hpZnRlZCBvdXQgdG8gdGhlIFBIWSBieSBzZXR0aW5nIHRoZSBNRElPIGJpdCB0byAiMCIgYW5kIHRoZW4KKwkJICogcmFpc2luZyBhbmQgbG93ZXJpbmcgdGhlIGNsb2NrLgorCQkgKi8KKwkJaWYgKGRhdGEgJiBtYXNrKQorCQkJY3RybCB8PSBFMTAwMF9DVFJMX01ESU87CisJCWVsc2UKKwkJCWN0cmwgJj0gfkUxMDAwX0NUUkxfTURJTzsKKworCQlFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwpOworCQlFMTAwMF9XUklURV9GTFVTSChodyk7CisKKwkJdWRlbGF5KDIpOworCisJCWUxMDAwX3JhaXNlX21kaV9jbGsoaHcsICZjdHJsKTsKKwkJZTEwMDBfbG93ZXJfbWRpX2NsayhodywgJmN0cmwpOworCisJCW1hc2sgPSBtYXNrID4+IDE7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNoaWZ0cyBkYXRhIGJpdHMgaW4gZnJvbSB0aGUgUEhZCisqCisqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisqCisqIEJpdHMgYXJlIHNoaWZ0ZWQgaW4gaW4gTVNCIHRvIExTQiBvcmRlci4gCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdWludDE2X3QKK2UxMDAwX3NoaWZ0X2luX21kaV9iaXRzKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdWludDMyX3QgY3RybDsKKwl1aW50MTZfdCBkYXRhID0gMDsKKwl1aW50OF90IGk7CisKKwkvKiBJbiBvcmRlciB0byByZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgUEhZLCB3ZSBuZWVkIHRvIHNoaWZ0IGluIGEgdG90YWwKKwkgKiBvZiAxOCBiaXRzIGZyb20gdGhlIFBIWS4gVGhlIGZpcnN0IHR3byBiaXQgKHR1cm5hcm91bmQpIHRpbWVzIGFyZSB1c2VkCisJICogdG8gYXZvaWQgY29udGVudGlvbiBvbiB0aGUgTURJTyBwaW4gd2hlbiBhIHJlYWQgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4KKwkgKiBUaGVzZSB0d28gYml0cyBhcmUgaWdub3JlZCBieSB1cyBhbmQgdGhyb3duIGF3YXkuIEJpdHMgYXJlICJzaGlmdGVkIGluIgorCSAqIGJ5IHJhaXNpbmcgdGhlIGlucHV0IHRvIHRoZSBNYW5hZ2VtZW50IERhdGEgQ2xvY2sgKHNldHRpbmcgdGhlIE1EQyBiaXQpLAorCSAqIGFuZCB0aGVuIHJlYWRpbmcgdGhlIHZhbHVlIG9mIHRoZSBNRElPIGJpdC4KKwkgKi8KKwljdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOworCisJLyogQ2xlYXIgTURJT19ESVIgKFNXRFBJTzEpIHRvIGluZGljYXRlIHRoaXMgYml0IGlzIHRvIGJlIHVzZWQgYXMgaW5wdXQuICovCisJY3RybCAmPSB+RTEwMDBfQ1RSTF9NRElPX0RJUjsKKwljdHJsICY9IH5FMTAwMF9DVFJMX01ESU87CisKKwlFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwpOworCUUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKworCS8qIFJhaXNlIGFuZCBMb3dlciB0aGUgY2xvY2sgYmVmb3JlIHJlYWRpbmcgaW4gdGhlIGRhdGEuIFRoaXMgYWNjb3VudHMgZm9yCisJICogdGhlIHR1cm5hcm91bmQgYml0cy4gVGhlIGZpcnN0IGNsb2NrIG9jY3VycmVkIHdoZW4gd2UgY2xvY2tlZCBvdXQgdGhlCisJICogbGFzdCBiaXQgb2YgdGhlIFJlZ2lzdGVyIEFkZHJlc3MuCisJICovCisJZTEwMDBfcmFpc2VfbWRpX2NsayhodywgJmN0cmwpOworCWUxMDAwX2xvd2VyX21kaV9jbGsoaHcsICZjdHJsKTsKKworCWZvciAoZGF0YSA9IDAsIGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlkYXRhID0gZGF0YSA8PCAxOworCQllMTAwMF9yYWlzZV9tZGlfY2xrKGh3LCAmY3RybCk7CisJCWN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTCk7CisJCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBzaGlmdGVkIGluIGEgIjEiLiAqLworCQlpZiAoY3RybCAmIEUxMDAwX0NUUkxfTURJTykKKwkJCWRhdGEgfD0gMTsKKwkJZTEwMDBfbG93ZXJfbWRpX2NsayhodywgJmN0cmwpOworCX0KKworCWUxMDAwX3JhaXNlX21kaV9jbGsoaHcsICZjdHJsKTsKKwllMTAwMF9sb3dlcl9tZGlfY2xrKGh3LCAmY3RybCk7CisKKwlyZXR1cm4gZGF0YTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFJlYWRzIHRoZSB2YWx1ZSBmcm9tIGEgUEhZIHJlZ2lzdGVyCisqCisqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisqIHJlZ19hZGRyIC0gYWRkcmVzcyBvZiB0aGUgUEhZIHJlZ2lzdGVyIHRvIHJlYWQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQKK2UxMDAwX3JlYWRfcGh5X3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCByZWdfYWRkciwgdWludDE2X3QgKiBwaHlfZGF0YSkKK3sKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IG1kaWMgPSAwOworCWNvbnN0IHVpbnQzMl90IHBoeV9hZGRyID0gMTsKKworCWlmIChyZWdfYWRkciA+IE1BWF9QSFlfUkVHX0FERFJFU1MpIHsKKwkJREVCVUdPVVQoIlBIWSBBZGRyZXNzICVkIGlzIG91dCBvZiByYW5nZVxuIiwgcmVnX2FkZHIpOworCQlyZXR1cm4gLUUxMDAwX0VSUl9QQVJBTTsKKwl9CisKKwlpZiAoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDMpIHsKKwkJLyogU2V0IHVwIE9wLWNvZGUsIFBoeSBBZGRyZXNzLCBhbmQgcmVnaXN0ZXIgYWRkcmVzcyBpbiB0aGUgTURJCisJCSAqIENvbnRyb2wgcmVnaXN0ZXIuICBUaGUgTUFDIHdpbGwgdGFrZSBjYXJlIG9mIGludGVyZmFjaW5nIHdpdGggdGhlCisJCSAqIFBIWSB0byByZXRyaWV2ZSB0aGUgZGVzaXJlZCBkYXRhLgorCQkgKi8KKwkJbWRpYyA9ICgocmVnX2FkZHIgPDwgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHwKKwkJCShwaHlfYWRkciA8PCBFMTAwMF9NRElDX1BIWV9TSElGVCkgfAorCQkJKEUxMDAwX01ESUNfT1BfUkVBRCkpOworCisJCUUxMDAwX1dSSVRFX1JFRyhodywgTURJQywgbWRpYyk7CisKKwkJLyogUG9sbCB0aGUgcmVhZHkgYml0IHRvIHNlZSBpZiB0aGUgTURJIHJlYWQgY29tcGxldGVkICovCisJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CisJCQl1ZGVsYXkoMTApOworCQkJbWRpYyA9IEUxMDAwX1JFQURfUkVHKGh3LCBNRElDKTsKKwkJCWlmIChtZGljICYgRTEwMDBfTURJQ19SRUFEWSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIShtZGljICYgRTEwMDBfTURJQ19SRUFEWSkpIHsKKwkJCURFQlVHT1VUKCJNREkgUmVhZCBkaWQgbm90IGNvbXBsZXRlXG4iKTsKKwkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwkJfQorCQlpZiAobWRpYyAmIEUxMDAwX01ESUNfRVJST1IpIHsKKwkJCURFQlVHT1VUKCJNREkgRXJyb3JcbiIpOworCQkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCQl9CisJCSpwaHlfZGF0YSA9ICh1aW50MTZfdCkgbWRpYzsKKwl9IGVsc2UgeworCQkvKiBXZSBtdXN0IGZpcnN0IHNlbmQgYSBwcmVhbWJsZSB0aHJvdWdoIHRoZSBNRElPIHBpbiB0byBzaWduYWwgdGhlCisJCSAqIGJlZ2lubmluZyBvZiBhbiBNSUkgaW5zdHJ1Y3Rpb24uICBUaGlzIGlzIGRvbmUgYnkgc2VuZGluZyAzMgorCQkgKiBjb25zZWN1dGl2ZSAiMSIgYml0cy4KKwkJICovCisJCWUxMDAwX3NoaWZ0X291dF9tZGlfYml0cyhodywgUEhZX1BSRUFNQkxFLCBQSFlfUFJFQU1CTEVfU0laRSk7CisKKwkJLyogTm93IGNvbWJpbmUgdGhlIG5leHQgZmV3IGZpZWxkcyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgYSByZWFkCisJCSAqIG9wZXJhdGlvbi4gIFdlIHVzZSB0aGlzIG1ldGhvZCBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlCisJCSAqIGUxMDAwX3NoaWZ0X291dF9tZGlfYml0cyByb3V0aW5lIGZpdmUgZGlmZmVyZW50IHRpbWVzLiBUaGUgZm9ybWF0IG9mCisJCSAqIGEgTUlJIHJlYWQgaW5zdHJ1Y3Rpb24gY29uc2lzdHMgb2YgYSBzaGlmdCBvdXQgb2YgMTQgYml0cyBhbmQgaXMKKwkJICogZGVmaW5lZCBhcyBmb2xsb3dzOgorCQkgKiAgICA8UHJlYW1ibGU+PFNPRj48T3AgQ29kZT48UGh5IEFkZHI+PFJlZyBBZGRyPgorCQkgKiBmb2xsb3dlZCBieSBhIHNoaWZ0IGluIG9mIDE4IGJpdHMuICBUaGlzIGZpcnN0IHR3byBiaXRzIHNoaWZ0ZWQgaW4KKwkJICogYXJlIFR1cm5Bcm91bmQgYml0cyB1c2VkIHRvIGF2b2lkIGNvbnRlbnRpb24gb24gdGhlIE1ESU8gcGluIHdoZW4gYQorCQkgKiBSRUFEIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuICBUaGVzZSB0d28gYml0cyBhcmUgdGhyb3duIGF3YXkKKwkJICogZm9sbG93ZWQgYnkgYSBzaGlmdCBpbiBvZiAxNiBiaXRzIHdoaWNoIGNvbnRhaW5zIHRoZSBkZXNpcmVkIGRhdGEuCisJCSAqLworCQltZGljID0gKChyZWdfYWRkcikgfCAocGh5X2FkZHIgPDwgNSkgfAorCQkJKFBIWV9PUF9SRUFEIDw8IDEwKSB8IChQSFlfU09GIDw8IDEyKSk7CisKKwkJZTEwMDBfc2hpZnRfb3V0X21kaV9iaXRzKGh3LCBtZGljLCAxNCk7CisKKwkJLyogTm93IHRoYXQgd2UndmUgc2hpZnRlZCBvdXQgdGhlIHJlYWQgY29tbWFuZCB0byB0aGUgTUlJLCB3ZSBuZWVkIHRvCisJCSAqICJzaGlmdCBpbiIgdGhlIDE2LWJpdCB2YWx1ZSAoMTggdG90YWwgYml0cykgb2YgdGhlIHJlcXVlc3RlZCBQSFkKKwkJICogcmVnaXN0ZXIgYWRkcmVzcy4KKwkJICovCisJCSpwaHlfZGF0YSA9IGUxMDAwX3NoaWZ0X2luX21kaV9iaXRzKGh3KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogV3JpdGVzIGEgdmFsdWUgdG8gYSBQSFkgcmVnaXN0ZXIKKyoKKyogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKKyogcmVnX2FkZHIgLSBhZGRyZXNzIG9mIHRoZSBQSFkgcmVnaXN0ZXIgdG8gd3JpdGUKKyogZGF0YSAtIGRhdGEgdG8gd3JpdGUgdG8gdGhlIFBIWQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorZTEwMDBfd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCByZWdfYWRkciwgdWludDE2X3QgcGh5X2RhdGEpCit7CisJdWludDMyX3QgaTsKKwl1aW50MzJfdCBtZGljID0gMDsKKwljb25zdCB1aW50MzJfdCBwaHlfYWRkciA9IDE7CisKKwlpZiAocmVnX2FkZHIgPiBNQVhfUEhZX1JFR19BRERSRVNTKSB7CisJCURFQlVHT1VUKCJQSFkgQWRkcmVzcyAlZCBpcyBvdXQgb2YgcmFuZ2VcbiIsIHJlZ19hZGRyKTsKKwkJcmV0dXJuIC1FMTAwMF9FUlJfUEFSQU07CisJfQorCisJaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQzKSB7CisJCS8qIFNldCB1cCBPcC1jb2RlLCBQaHkgQWRkcmVzcywgcmVnaXN0ZXIgYWRkcmVzcywgYW5kIGRhdGEgaW50ZW5kZWQKKwkJICogZm9yIHRoZSBQSFkgcmVnaXN0ZXIgaW4gdGhlIE1ESSBDb250cm9sIHJlZ2lzdGVyLiAgVGhlIE1BQyB3aWxsIHRha2UKKwkJICogY2FyZSBvZiBpbnRlcmZhY2luZyB3aXRoIHRoZSBQSFkgdG8gc2VuZCB0aGUgZGVzaXJlZCBkYXRhLgorCQkgKi8KKwkJbWRpYyA9ICgoKHVpbnQzMl90KSBwaHlfZGF0YSkgfAorCQkJKHJlZ19hZGRyIDw8IEUxMDAwX01ESUNfUkVHX1NISUZUKSB8CisJCQkocGh5X2FkZHIgPDwgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKKwkJCShFMTAwMF9NRElDX09QX1dSSVRFKSk7CisKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBNRElDLCBtZGljKTsKKworCQkvKiBQb2xsIHRoZSByZWFkeSBiaXQgdG8gc2VlIGlmIHRoZSBNREkgcmVhZCBjb21wbGV0ZWQgKi8KKwkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKwkJCXVkZWxheSgxMCk7CisJCQltZGljID0gRTEwMDBfUkVBRF9SRUcoaHcsIE1ESUMpOworCQkJaWYgKG1kaWMgJiBFMTAwMF9NRElDX1JFQURZKQorCQkJCWJyZWFrOworCQl9CisJCWlmICghKG1kaWMgJiBFMTAwMF9NRElDX1JFQURZKSkgeworCQkJREVCVUdPVVQoIk1ESSBXcml0ZSBkaWQgbm90IGNvbXBsZXRlXG4iKTsKKwkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFdlJ2xsIG5lZWQgdG8gdXNlIHRoZSBTVyBkZWZpbmVkIHBpbnMgdG8gc2hpZnQgdGhlIHdyaXRlIGNvbW1hbmQKKwkJICogb3V0IHRvIHRoZSBQSFkuIFdlIGZpcnN0IHNlbmQgYSBwcmVhbWJsZSB0byB0aGUgUEhZIHRvIHNpZ25hbCB0aGUKKwkJICogYmVnaW5uaW5nIG9mIHRoZSBNSUkgaW5zdHJ1Y3Rpb24uICBUaGlzIGlzIGRvbmUgYnkgc2VuZGluZyAzMiAKKwkJICogY29uc2VjdXRpdmUgIjEiIGJpdHMuCisJCSAqLworCQllMTAwMF9zaGlmdF9vdXRfbWRpX2JpdHMoaHcsIFBIWV9QUkVBTUJMRSwgUEhZX1BSRUFNQkxFX1NJWkUpOworCisJCS8qIE5vdyBjb21iaW5lIHRoZSByZW1haW5pbmcgcmVxdWlyZWQgZmllbGRzIHRoYXQgd2lsbCBpbmRpY2F0ZSBhIAorCQkgKiB3cml0ZSBvcGVyYXRpb24uIFdlIHVzZSB0aGlzIG1ldGhvZCBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlCisJCSAqIGUxMDAwX3NoaWZ0X291dF9tZGlfYml0cyByb3V0aW5lIGZvciBlYWNoIGZpZWxkIGluIHRoZSBjb21tYW5kLiBUaGUKKwkJICogZm9ybWF0IG9mIGEgTUlJIHdyaXRlIGluc3RydWN0aW9uIGlzIGFzIGZvbGxvd3M6CisJCSAqIDxQcmVhbWJsZT48U09GPjxPcCBDb2RlPjxQaHkgQWRkcj48UmVnIEFkZHI+PFR1cm5hcm91bmQ+PERhdGE+LgorCQkgKi8KKwkJbWRpYyA9ICgoUEhZX1RVUk5BUk9VTkQpIHwgKHJlZ19hZGRyIDw8IDIpIHwgKHBoeV9hZGRyIDw8IDcpIHwKKwkJCShQSFlfT1BfV1JJVEUgPDwgMTIpIHwgKFBIWV9TT0YgPDwgMTQpKTsKKwkJbWRpYyA8PD0gMTY7CisJCW1kaWMgfD0gKHVpbnQzMl90KSBwaHlfZGF0YTsKKworCQllMTAwMF9zaGlmdF9vdXRfbWRpX2JpdHMoaHcsIG1kaWMsIDMyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUmV0dXJucyB0aGUgUEhZIHRvIHRoZSBwb3dlci1vbiByZXNldCBzdGF0ZQorKgorKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQKK2UxMDAwX3BoeV9od19yZXNldChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXVpbnQzMl90IGN0cmw7CisJdWludDMyX3QgY3RybF9leHQ7CisKKwlERUJVR0ZVTkMoKTsKKworCURFQlVHT1VUKCJSZXNldHRpbmcgUGh5Li4uXG4iKTsKKworCWlmIChody0+bWFjX3R5cGUgPiBlMTAwMF84MjU0MykgeworCQkvKiBSZWFkIHRoZSBkZXZpY2UgY29udHJvbCByZWdpc3RlciBhbmQgYXNzZXJ0IHRoZSBFMTAwMF9DVFJMX1BIWV9SU1QKKwkJICogYml0LiBUaGVuLCB0YWtlIGl0IG91dCBvZiByZXNldC4KKwkJICovCisJCWN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTCk7CisJCUUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgY3RybCB8IEUxMDAwX0NUUkxfUEhZX1JTVCk7CisJCUUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKKwkJbWRlbGF5KDEwKTsKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKKwkJRTEwMDBfV1JJVEVfRkxVU0goaHcpOworCX0gZWxzZSB7CisJCS8qIFJlYWQgdGhlIEV4dGVuZGVkIERldmljZSBDb250cm9sIFJlZ2lzdGVyLCBhc3NlcnQgdGhlIFBIWV9SRVNFVF9ESVIKKwkJICogYml0IHRvIHB1dCB0aGUgUEhZIGludG8gcmVzZXQuIFRoZW4sIHRha2UgaXQgb3V0IG9mIHJlc2V0LgorCQkgKi8KKwkJY3RybF9leHQgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTF9FWFQpOworCQljdHJsX2V4dCB8PSBFMTAwMF9DVFJMX0VYVF9TRFA0X0RJUjsKKwkJY3RybF9leHQgJj0gfkUxMDAwX0NUUkxfRVhUX1NEUDRfREFUQTsKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMX0VYVCwgY3RybF9leHQpOworCQlFMTAwMF9XUklURV9GTFVTSChodyk7CisJCW1kZWxheSgxMCk7CisJCWN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfRVhUX1NEUDRfREFUQTsKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMX0VYVCwgY3RybF9leHQpOworCQlFMTAwMF9XUklURV9GTFVTSChodyk7CisJfQorCXVkZWxheSgxNTApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFJlc2V0cyB0aGUgUEhZCisqCisqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisqCisqIFNldHMgYml0IDE1IG9mIHRoZSBNSUkgQ29udHJvbCByZWdpc2VyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CitlMTAwMF9waHlfcmVzZXQoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1aW50MTZfdCBwaHlfZGF0YTsKKworCURFQlVHRlVOQygpOworCisJaWYgKGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX0NUUkwsICZwaHlfZGF0YSkgPCAwKSB7CisJCURFQlVHT1VUKCJQSFkgUmVhZCBFcnJvclxuIik7CisJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwl9CisJcGh5X2RhdGEgfD0gTUlJX0NSX1JFU0VUOworCWlmIChlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgcGh5X2RhdGEpIDwgMCkgeworCQlERUJVR09VVCgiUEhZIFdyaXRlIEVycm9yXG4iKTsKKwkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCX0KKwl1ZGVsYXkoMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogUHJvYmVzIHRoZSBleHBlY3RlZCBQSFkgYWRkcmVzcyBmb3Iga25vd24gUEhZIElEcworKgorKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorZTEwMDBfZGV0ZWN0X2dpZ19waHkoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1aW50MTZfdCBwaHlfaWRfaGlnaCwgcGh5X2lkX2xvdzsKKwlpbnQgbWF0Y2ggPSBGQUxTRTsKKworCURFQlVHRlVOQygpOworCisJLyogUmVhZCB0aGUgUEhZIElEIFJlZ2lzdGVycyB0byBpZGVudGlmeSB3aGljaCBQSFkgaXMgb25ib2FyZC4gKi8KKwlpZiAoZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfSUQxLCAmcGh5X2lkX2hpZ2gpIDwgMCkgeworCQlERUJVR09VVCgiUEhZIFJlYWQgRXJyb3JcbiIpOworCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisJfQorCWh3LT5waHlfaWQgPSAodWludDMyX3QpIChwaHlfaWRfaGlnaCA8PCAxNik7CisJdWRlbGF5KDIpOworCWlmIChlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9JRDIsICZwaHlfaWRfbG93KSA8IDApIHsKKwkJREVCVUdPVVQoIlBIWSBSZWFkIEVycm9yXG4iKTsKKwkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCX0KKwlody0+cGh5X2lkIHw9ICh1aW50MzJfdCkgKHBoeV9pZF9sb3cgJiBQSFlfUkVWSVNJT05fTUFTSyk7CisKKwlzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgeworCWNhc2UgZTEwMDBfODI1NDM6CisJCWlmIChody0+cGh5X2lkID09IE04OEUxMDAwX0VfUEhZX0lEKQorCQkJbWF0Y2ggPSBUUlVFOworCQlicmVhazsKKwljYXNlIGUxMDAwXzgyNTQ0OgorCQlpZiAoaHctPnBoeV9pZCA9PSBNODhFMTAwMF9JX1BIWV9JRCkKKwkJCW1hdGNoID0gVFJVRTsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF84MjU0MDoKKwljYXNlIGUxMDAwXzgyNTQ1OgorCWNhc2UgZTEwMDBfODI1NDY6CisJCWlmIChody0+cGh5X2lkID09IE04OEUxMDExX0lfUEhZX0lEKQorCQkJbWF0Y2ggPSBUUlVFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR09VVCgiSW52YWxpZCBNQUMgdHlwZSAlZFxuIiwgaHctPm1hY190eXBlKTsKKwkJcmV0dXJuIC1FMTAwMF9FUlJfQ09ORklHOworCX0KKwlpZiAobWF0Y2gpIHsKKwkJREVCVUdPVVQoIlBIWSBJRCAweCVYIGRldGVjdGVkXG4iLCBody0+cGh5X2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCURFQlVHT1VUKCJJbnZhbGlkIFBIWSBJRCAweCVYXG4iLCBody0+cGh5X2lkKTsKKwlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7Cit9CisKKy8qKgorICogZTEwMDBfc3dfaW5pdCAtIEluaXRpYWxpemUgZ2VuZXJhbCBzb2Z0d2FyZSBzdHJ1Y3R1cmVzIChzdHJ1Y3QgZTEwMDBfYWRhcHRlcikKKyAqCisgKiBlMTAwMF9zd19pbml0IGluaXRpYWxpemVzIHRoZSBBZGFwdGVyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUuCisgKiBGaWVsZHMgYXJlIGluaXRpYWxpemVkIGJhc2VkIG9uIFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gYW5kCisgKiBPUyBuZXR3b3JrIGRldmljZSBzZXR0aW5ncyAoTVRVIHNpemUpLgorICoqLworCitzdGF0aWMgaW50CitlMTAwMF9zd19pbml0KHN0cnVjdCBldGhfZGV2aWNlICpuaWMsIGludCBjYXJkbnVtKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAodHlwZW9mKGh3KSkgbmljLT5wcml2OworCWludCByZXN1bHQ7CisKKwkvKiBQQ0kgY29uZmlnIHNwYWNlIGluZm8gKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChody0+cGRldiwgUENJX1ZFTkRPUl9JRCwgJmh3LT52ZW5kb3JfaWQpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lfREVWSUNFX0lELCAmaHctPmRldmljZV9pZCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoaHctPnBkZXYsIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELAorCQkJICAgICAmaHctPnN1YnN5c3RlbV92ZW5kb3JfaWQpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lfU1VCU1lTVEVNX0lELCAmaHctPnN1YnN5c3RlbV9pZCk7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShody0+cGRldiwgUENJX1JFVklTSU9OX0lELCAmaHctPnJldmlzaW9uX2lkKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChody0+cGRldiwgUENJX0NPTU1BTkQsICZody0+cGNpX2NtZF93b3JkKTsKKworCS8qIGlkZW50aWZ5IHRoZSBNQUMgKi8KKwlyZXN1bHQgPSBlMTAwMF9zZXRfbWFjX3R5cGUoaHcpOworCWlmIChyZXN1bHQpIHsKKwkJRTEwMDBfRVJSKCJVbmtub3duIE1BQyBUeXBlXG4iKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiBsYW4gYSB2cy4gbGFuIGIgc2V0dGluZ3MgKi8KKwlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ2KQorCQkvKnRoaXMgYWxzbyB3b3JrcyB3LyBtdWx0aXBsZSA4MjU0NiBjYXJkcyAqLworCQkvKmJ1dCBub3QgaWYgdGhleSdyZSBpbnRlcm1pbmdsZWQgL3cgb3RoZXIgZTEwMDBzICovCisJCWh3LT5sYW5fbG9jID0gKGNhcmRudW0gJSAyKSA/IGUxMDAwX2xhbl9iIDogZTEwMDBfbGFuX2E7CisJZWxzZQorCQlody0+bGFuX2xvYyA9IGUxMDAwX2xhbl9hOworCisJLyogZmxvdyBjb250cm9sIHNldHRpbmdzICovCisJaHctPmZjX2hpZ2hfd2F0ZXIgPSBFMTAwMF9GQ19ISUdIX1RIUkVTSDsKKwlody0+ZmNfbG93X3dhdGVyID0gRTEwMDBfRkNfTE9XX1RIUkVTSDsKKwlody0+ZmNfcGF1c2VfdGltZSA9IEUxMDAwX0ZDX1BBVVNFX1RJTUU7CisJaHctPmZjX3NlbmRfeG9uID0gMTsKKworCS8qIE1lZGlhIHR5cGUgLSBjb3BwZXIgb3IgZmliZXIgKi8KKworCWlmIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDMpIHsKKwkJdWludDMyX3Qgc3RhdHVzID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUyk7CisKKwkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19UQklNT0RFKSB7CisJCQlERUJVR09VVCgiZmliZXIgaW50ZXJmYWNlXG4iKTsKKwkJCWh3LT5tZWRpYV90eXBlID0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcjsKKwkJfSBlbHNlIHsKKwkJCURFQlVHT1VUKCJjb3BwZXIgaW50ZXJmYWNlXG4iKTsKKwkJCWh3LT5tZWRpYV90eXBlID0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXI7CisJCX0KKwl9IGVsc2UgeworCQlody0+bWVkaWFfdHlwZSA9IGUxMDAwX21lZGlhX3R5cGVfZmliZXI7CisJfQorCisJaWYgKGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTQzKQorCQlody0+cmVwb3J0X3R4X2Vhcmx5ID0gMDsKKwllbHNlCisJCWh3LT5yZXBvcnRfdHhfZWFybHkgPSAxOworCisJaHctPnRiaV9jb21wYXRpYmlsaXR5X2VuID0gVFJVRTsKKyNpZiAwCisJaHctPndhaXRfYXV0b25lZ19jb21wbGV0ZSA9IEZBTFNFOworCWh3LT5hZGFwdGl2ZV9pZnMgPSBUUlVFOworCisJLyogQ29wcGVyIG9wdGlvbnMgKi8KKwlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKwkJaHctPm1kaXggPSBBVVRPX0FMTF9NT0RFUzsKKwkJaHctPmRpc2FibGVfcG9sYXJpdHlfY29ycmVjdGlvbiA9IEZBTFNFOworCX0KKyNlbmRpZgorCXJldHVybiBFMTAwMF9TVUNDRVNTOworfQorCit2b2lkCitmaWxsX3J4KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX3J4X2Rlc2MgKnJkOworCisJcnhfbGFzdCA9IHJ4X3RhaWw7CisJcmQgPSByeF9iYXNlICsgcnhfdGFpbDsKKwlyeF90YWlsID0gKHJ4X3RhaWwgKyAxKSAlIDg7CisJbWVtc2V0KHJkLCAwLCAxNik7CisJcmQtPmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoKHUzMikgJiBwYWNrZXQpOworCUUxMDAwX1dSSVRFX1JFRyhodywgUkRULCByeF90YWlsKTsKK30KKworLyoqCisgKiBlMTAwMF9jb25maWd1cmVfdHggLSBDb25maWd1cmUgODI1NHggVHJhbnNtaXQgVW5pdCBhZnRlciBSZXNldAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHRoZSBUeCB1bml0IG9mIHRoZSBNQUMgYWZ0ZXIgYSByZXNldC4KKyAqKi8KKworc3RhdGljIHZvaWQKK2UxMDAwX2NvbmZpZ3VyZV90eChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXVuc2lnbmVkIGxvbmcgcHRyOworCXVuc2lnbmVkIGxvbmcgdGN0bDsKKwl1bnNpZ25lZCBsb25nIHRpcGc7CisKKwlwdHIgPSAodTMyKSB0eF9wb29sOworCWlmIChwdHIgJiAweGYpCisJCXB0ciA9IChwdHIgKyAweDEwKSAmICh+MHhmKTsKKworCXR4X2Jhc2UgPSAodHlwZW9mKHR4X2Jhc2UpKSBwdHI7CisKKwlFMTAwMF9XUklURV9SRUcoaHcsIFREQkFMLCAodTMyKSB0eF9iYXNlKTsKKwlFMTAwMF9XUklURV9SRUcoaHcsIFREQkFILCAwKTsKKworCUUxMDAwX1dSSVRFX1JFRyhodywgVERMRU4sIDEyOCk7CisKKwkvKiBTZXR1cCB0aGUgSFcgVHggSGVhZCBhbmQgVGFpbCBkZXNjcmlwdG9yIHBvaW50ZXJzICovCisJRTEwMDBfV1JJVEVfUkVHKGh3LCBUREgsIDApOworCUUxMDAwX1dSSVRFX1JFRyhodywgVERULCAwKTsKKwl0eF90YWlsID0gMDsKKworCS8qIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBUeCBJbnRlciBQYWNrZXQgR2FwIHRpbWVyICovCisJc3dpdGNoIChody0+bWFjX3R5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTQyX3JldjJfMDoKKwljYXNlIGUxMDAwXzgyNTQyX3JldjJfMToKKwkJdGlwZyA9IERFRkFVTFRfODI1NDJfVElQR19JUEdUOworCQl0aXBnIHw9IERFRkFVTFRfODI1NDJfVElQR19JUEdSMSA8PCBFMTAwMF9USVBHX0lQR1IxX1NISUZUOworCQl0aXBnIHw9IERFRkFVTFRfODI1NDJfVElQR19JUEdSMiA8PCBFMTAwMF9USVBHX0lQR1IyX1NISUZUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikKKwkJCXRpcGcgPSBERUZBVUxUXzgyNTQzX1RJUEdfSVBHVF9GSUJFUjsKKwkJZWxzZQorCQkJdGlwZyA9IERFRkFVTFRfODI1NDNfVElQR19JUEdUX0NPUFBFUjsKKwkJdGlwZyB8PSBERUZBVUxUXzgyNTQzX1RJUEdfSVBHUjEgPDwgRTEwMDBfVElQR19JUEdSMV9TSElGVDsKKwkJdGlwZyB8PSBERUZBVUxUXzgyNTQzX1RJUEdfSVBHUjIgPDwgRTEwMDBfVElQR19JUEdSMl9TSElGVDsKKwl9CisJRTEwMDBfV1JJVEVfUkVHKGh3LCBUSVBHLCB0aXBnKTsKKyNpZiAwCisJLyogU2V0IHRoZSBUeCBJbnRlcnJ1cHQgRGVsYXkgcmVnaXN0ZXIgKi8KKwlFMTAwMF9XUklURV9SRUcoaHcsIFRJRFYsIGFkYXB0ZXItPnR4X2ludF9kZWxheSk7CisJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCkKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBUQURWLCBhZGFwdGVyLT50eF9hYnNfaW50X2RlbGF5KTsKKyNlbmRpZgorCS8qIFByb2dyYW0gdGhlIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl0Y3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRDVEwpOworCXRjdGwgJj0gfkUxMDAwX1RDVExfQ1Q7CisJdGN0bCB8PSBFMTAwMF9UQ1RMX0VOIHwgRTEwMDBfVENUTF9QU1AgfAorCSAgICAoRTEwMDBfQ09MTElTSU9OX1RIUkVTSE9MRCA8PCBFMTAwMF9DVF9TSElGVCk7CisJRTEwMDBfV1JJVEVfUkVHKGh3LCBUQ1RMLCB0Y3RsKTsKKworCWUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CisjaWYgMAorCS8qIFNldHVwIFRyYW5zbWl0IERlc2NyaXB0b3IgU2V0dGluZ3MgZm9yIHRoaXMgYWRhcHRlciAqLworCWFkYXB0ZXItPnR4ZF9jbWQgPSBFMTAwMF9UWERfQ01EX0lGQ1MgfCBFMTAwMF9UWERfQ01EX0lERTsKKworCWlmIChhZGFwdGVyLT5ody5yZXBvcnRfdHhfZWFybHkgPT0gMSkKKwkJYWRhcHRlci0+dHhkX2NtZCB8PSBFMTAwMF9UWERfQ01EX1JTOworCWVsc2UKKwkJYWRhcHRlci0+dHhkX2NtZCB8PSBFMTAwMF9UWERfQ01EX1JQUzsKKyNlbmRpZgorfQorCisvKioKKyAqIGUxMDAwX3NldHVwX3JjdGwgLSBjb25maWd1cmUgdGhlIHJlY2VpdmUgY29udHJvbCByZWdpc3RlcgorICogQGFkYXB0ZXI6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiovCitzdGF0aWMgdm9pZAorZTEwMDBfc2V0dXBfcmN0bChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXVpbnQzMl90IHJjdGw7CisKKwlyY3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJDVEwpOworCisJcmN0bCAmPSB+KDMgPDwgRTEwMDBfUkNUTF9NT19TSElGVCk7CisKKwlyY3RsIHw9IEUxMDAwX1JDVExfRU4gfCBFMTAwMF9SQ1RMX0JBTSB8IEUxMDAwX1JDVExfTEJNX05PIHwgRTEwMDBfUkNUTF9SRE1UU19IQUxGOwkvKiB8CisJCQkJCQkJCQkJCQkgICAoaHcubWNfZmlsdGVyX3R5cGUgPDwgRTEwMDBfUkNUTF9NT19TSElGVCk7ICovCisKKwlpZiAoaHctPnRiaV9jb21wYXRpYmlsaXR5X29uID09IDEpCisJCXJjdGwgfD0gRTEwMDBfUkNUTF9TQlA7CisJZWxzZQorCQlyY3RsICY9IH5FMTAwMF9SQ1RMX1NCUDsKKworCXJjdGwgJj0gfihFMTAwMF9SQ1RMX1NaXzQwOTYpOworI2lmIDAKKwlzd2l0Y2ggKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4pIHsKKwljYXNlIEUxMDAwX1JYQlVGRkVSXzIwNDg6CisJZGVmYXVsdDoKKyNlbmRpZgorCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMjA0ODsKKwkJcmN0bCAmPSB+KEUxMDAwX1JDVExfQlNFWCB8IEUxMDAwX1JDVExfTFBFKTsKKyNpZiAwCisJCWJyZWFrOworCWNhc2UgRTEwMDBfUlhCVUZGRVJfNDA5NjoKKwkJcmN0bCB8PSBFMTAwMF9SQ1RMX1NaXzQwOTYgfCBFMTAwMF9SQ1RMX0JTRVggfCBFMTAwMF9SQ1RMX0xQRTsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9SWEJVRkZFUl84MTkyOgorCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfODE5MiB8IEUxMDAwX1JDVExfQlNFWCB8IEUxMDAwX1JDVExfTFBFOworCQlicmVhazsKKwljYXNlIEUxMDAwX1JYQlVGRkVSXzE2Mzg0OgorCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMTYzODQgfCBFMTAwMF9SQ1RMX0JTRVggfCBFMTAwMF9SQ1RMX0xQRTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisJRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCByY3RsKTsKK30KKworLyoqCisgKiBlMTAwMF9jb25maWd1cmVfcnggLSBDb25maWd1cmUgODI1NHggUmVjZWl2ZSBVbml0IGFmdGVyIFJlc2V0CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgdGhlIFJ4IHVuaXQgb2YgdGhlIE1BQyBhZnRlciBhIHJlc2V0LgorICoqLworc3RhdGljIHZvaWQKK2UxMDAwX2NvbmZpZ3VyZV9yeChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXVuc2lnbmVkIGxvbmcgcHRyOworCXVuc2lnbmVkIGxvbmcgcmN0bDsKKyNpZiAwCisJdW5zaWduZWQgbG9uZyByeGNzdW07CisjZW5kaWYKKwlyeF90YWlsID0gMDsKKwkvKiBtYWtlIHN1cmUgcmVjZWl2ZXMgYXJlIGRpc2FibGVkIHdoaWxlIHNldHRpbmcgdXAgdGhlIGRlc2NyaXB0b3JzICovCisJcmN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSQ1RMKTsKKwlFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CisjaWYgMAorCS8qIHNldCB0aGUgUmVjZWl2ZSBEZWxheSBUaW1lciBSZWdpc3RlciAqLworCisJRTEwMDBfV1JJVEVfUkVHKGh3LCBSRFRSLCBhZGFwdGVyLT5yeF9pbnRfZGVsYXkpOworI2VuZGlmCisJaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCkgeworI2lmIDAKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSQURWLCBhZGFwdGVyLT5yeF9hYnNfaW50X2RlbGF5KTsKKyNlbmRpZgorCQkvKiBTZXQgdGhlIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGUuICBWYWx1ZSBpcyBjYWxjdWxhdGVkCisJCSAqIGFzIERFRkFVTFRfSVRSID0gMS8oTUFYX0lOVFNfUEVSX1NFQyAqIDI1Nm5zKSAqLworI2RlZmluZSBNQVhfSU5UU19QRVJfU0VDICAgICAgICA4MDAwCisjZGVmaW5lIERFRkFVTFRfSVRSICAgICAgICAgICAgIDEwMDAwMDAwMDAvKE1BWF9JTlRTX1BFUl9TRUMgKiAyNTYpCisJCUUxMDAwX1dSSVRFX1JFRyhodywgSVRSLCBERUZBVUxUX0lUUik7CisJfQorCisJLyogU2V0dXAgdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nICovCisJcHRyID0gKHUzMikgcnhfcG9vbDsKKwlpZiAocHRyICYgMHhmKQorCQlwdHIgPSAocHRyICsgMHgxMCkgJiAofjB4Zik7CisJcnhfYmFzZSA9ICh0eXBlb2YocnhfYmFzZSkpIHB0cjsKKwlFMTAwMF9XUklURV9SRUcoaHcsIFJEQkFMLCAodTMyKSByeF9iYXNlKTsKKwlFMTAwMF9XUklURV9SRUcoaHcsIFJEQkFILCAwKTsKKworCUUxMDAwX1dSSVRFX1JFRyhodywgUkRMRU4sIDEyOCk7CisKKwkvKiBTZXR1cCB0aGUgSFcgUnggSGVhZCBhbmQgVGFpbCBEZXNjcmlwdG9yIFBvaW50ZXJzICovCisJRTEwMDBfV1JJVEVfUkVHKGh3LCBSREgsIDApOworCUUxMDAwX1dSSVRFX1JFRyhodywgUkRULCAwKTsKKyNpZiAwCisJLyogRW5hYmxlIDgyNTQzIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCBmb3IgVENQIGFuZCBVRFAgKi8KKwlpZiAoKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGUxMDAwXzgyNTQzKSAmJiAoYWRhcHRlci0+cnhfY3N1bSA9PSBUUlVFKSkgeworCQlyeGNzdW0gPSBFMTAwMF9SRUFEX1JFRyhodywgUlhDU1VNKTsKKwkJcnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9UVU9GTDsKKwkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSWENTVU0sIHJ4Y3N1bSk7CisJfQorI2VuZGlmCisJLyogRW5hYmxlIFJlY2VpdmVzICovCisKKwlFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwpOworCWZpbGxfcngoaHcpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1BPTEwgLSBXYWl0IGZvciBhIGZyYW1lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50CitlMTAwMF9wb2xsKHN0cnVjdCBldGhfZGV2aWNlICpuaWMpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9IG5pYy0+cHJpdjsKKwlzdHJ1Y3QgZTEwMDBfcnhfZGVzYyAqcmQ7CisJLyogcmV0dXJuIHRydWUgaWYgdGhlcmUncyBhbiBldGhlcm5ldCBwYWNrZXQgcmVhZHkgdG8gcmVhZCAqLworCXJkID0gcnhfYmFzZSArIHJ4X2xhc3Q7CisJaWYgKCEobGUzMl90b19jcHUocmQtPnN0YXR1cykpICYgRTEwMDBfUlhEX1NUQVRfREQpCisJCXJldHVybiAwOworCS8qREVCVUdPVVQoInJlY3Y6IHBhY2tldCBsZW49JWQgXG4iLCByZC0+bGVuZ3RoKTsgKi8KKwlOZXRSZWNlaXZlKHBhY2tldCwgbGUzMl90b19jcHUocmQtPmxlbmd0aCkpOworCWZpbGxfcngoaHcpOworCXJldHVybiAxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1RSQU5TTUlUIC0gVHJhbnNtaXQgYSBmcmFtZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorZTEwMDBfdHJhbnNtaXQoc3RydWN0IGV0aF9kZXZpY2UgKm5pYywgdm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSBuaWMtPnByaXY7CisJc3RydWN0IGUxMDAwX3R4X2Rlc2MgKnR4cDsKKwlpbnQgaSA9IDA7CisKKwl0eHAgPSB0eF9iYXNlICsgdHhfdGFpbDsKKwl0eF90YWlsID0gKHR4X3RhaWwgKyAxKSAlIDg7CisKKwl0eHAtPmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQodmlydF90b19idXMocGFja2V0KSk7CisJdHhwLT5sb3dlci5kYXRhID0gY3B1X3RvX2xlMzIoRTEwMDBfVFhEX0NNRF9SUFMgfCBFMTAwMF9UWERfQ01EX0VPUCB8CisJCQkJICAgICAgRTEwMDBfVFhEX0NNRF9JRkNTIHwgbGVuZ3RoKTsKKwl0eHAtPnVwcGVyLmRhdGEgPSAwOworCUUxMDAwX1dSSVRFX1JFRyhodywgVERULCB0eF90YWlsKTsKKworCXdoaWxlICghKGxlMzJfdG9fY3B1KHR4cC0+dXBwZXIuZGF0YSkgJiBFMTAwMF9UWERfU1RBVF9ERCkpIHsKKwkJaWYgKGkrKyA+IFRPVVRfTE9PUCkgeworCQkJREVCVUdPVVQoImUxMDAwOiB0eCB0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCXVkZWxheSgxMCk7CS8qIGdpdmUgdGhlIG5pYyBhIGNoYW5jZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIgKi8KKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qcmVzZXQgZnVuY3Rpb24qLworc3RhdGljIGlubGluZSBpbnQKK2UxMDAwX3Jlc2V0KHN0cnVjdCBldGhfZGV2aWNlICpuaWMpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9IG5pYy0+cHJpdjsKKworCWUxMDAwX3Jlc2V0X2h3KGh3KTsKKwlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQ0KSB7CisJCUUxMDAwX1dSSVRFX1JFRyhodywgV1VDLCAwKTsKKwl9CisJcmV0dXJuIGUxMDAwX2luaXRfaHcobmljKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitESVNBQkxFIC0gVHVybiBvZmYgZXRoZXJuZXQgaW50ZXJmYWNlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAorZTEwMDBfZGlzYWJsZShzdHJ1Y3QgZXRoX2RldmljZSAqbmljKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSBuaWMtPnByaXY7CisKKwkvKiBUdXJuIG9mZiB0aGUgZXRoZXJuZXQgaW50ZXJmYWNlICovCisJRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCAwKTsKKwlFMTAwMF9XUklURV9SRUcoaHcsIFRDVEwsIDApOworCisJLyogQ2xlYXIgdGhlIHRyYW5zbWl0IHJpbmcgKi8KKwlFMTAwMF9XUklURV9SRUcoaHcsIFRESCwgMCk7CisJRTEwMDBfV1JJVEVfUkVHKGh3LCBURFQsIDApOworCisJLyogQ2xlYXIgdGhlIHJlY2VpdmUgcmluZyAqLworCUUxMDAwX1dSSVRFX1JFRyhodywgUkRILCAwKTsKKwlFMTAwMF9XUklURV9SRUcoaHcsIFJEVCwgMCk7CisKKwkvKiBwdXQgdGhlIGNhcmQgaW4gaXRzIGluaXRpYWwgc3RhdGUgKi8KKyNpZiAwCisJRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBFMTAwMF9DVFJMX1JTVCk7CisjZW5kaWYKKwltZGVsYXkoMTApOworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorSU5JVCAtIHNldCB1cCBldGhlcm5ldCBpbnRlcmZhY2UocykKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQKK2UxMDAwX2luaXQoc3RydWN0IGV0aF9kZXZpY2UgKm5pYywgYmRfdCAqIGJpcykKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gbmljLT5wcml2OworCWludCByZXRfdmFsID0gMDsKKworCXJldF92YWwgPSBlMTAwMF9yZXNldChuaWMpOworCWlmIChyZXRfdmFsIDwgMCkgeworCQlpZiAoKHJldF92YWwgPT0gLUUxMDAwX0VSUl9OT0xJTkspIHx8CisJCSAgICAocmV0X3ZhbCA9PSAtRTEwMDBfRVJSX1RJTUVPVVQpKSB7CisJCQlFMTAwMF9FUlIoIlZhbGlkIExpbmsgbm90IGRldGVjdGVkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCUUxMDAwX0VSUigiSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24gRmFpbGVkXG4iKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJZTEwMDBfY29uZmlndXJlX3R4KGh3KTsKKwllMTAwMF9zZXR1cF9yY3RsKGh3KTsKKwllMTAwMF9jb25maWd1cmVfcngoaHcpOworCXJldHVybiAxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1BST0JFIC0gTG9vayBmb3IgYW4gYWRhcHRlciwgdGhpcyByb3V0aW5lJ3MgdmlzaWJsZSB0byB0aGUgb3V0c2lkZQorWW91IHNob3VsZCBvbWl0IHRoZSBsYXN0IGFyZ3VtZW50IHN0cnVjdCBwY2lfZGV2aWNlICogZm9yIGEgbm9uLVBDSSBOSUMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorZTEwMDBfaW5pdGlhbGl6ZShiZF90ICogYmlzKQoreworCXBjaV9kZXZfdCBkZXZubzsKKwlpbnQgY2FyZF9udW1iZXIgPSAwOworCXN0cnVjdCBldGhfZGV2aWNlICpuaWMgPSBOVUxMOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSBOVUxMOworCXUzMiBpb2Jhc2U7CisJaW50IGlkeCA9IDA7CisJdTMyIFBjaUNvbW1hbmRXb3JkOworCisJd2hpbGUgKDEpIHsJCS8qIEZpbmQgUENJIGRldmljZShzKSAqLworCQlpZiAoKGRldm5vID0gcGNpX2ZpbmRfZGV2aWNlcyhzdXBwb3J0ZWQsIGlkeCsrKSkgPCAwKSB7CisJCQlicmVhazsKKwkJfQorCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZubywgUENJX0JBU0VfQUREUkVTU18wLCAmaW9iYXNlKTsKKwkJaW9iYXNlICY9IH4weGY7CS8qIE1hc2sgdGhlIGJpdHMgdGhhdCBzYXkgInRoaXMgaXMgYW4gaW8gYWRkciIgKi8KKwkJREVCVUdPVVQoImUxMDAwIyVkOiBpb2Jhc2UgMHglMDh4XG4iLCBjYXJkX251bWJlciwgaW9iYXNlKTsKKworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldm5vLCBQQ0lfQ09NTUFORCwKKwkJCQkgICAgICAgUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSKTsKKwkJLyogQ2hlY2sgaWYgSS9PIGFjY2Vzc2VzIGFuZCBCdXMgTWFzdGVyaW5nIGFyZSBlbmFibGVkLiAqLworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2bm8sIFBDSV9DT01NQU5ELCAmUGNpQ29tbWFuZFdvcmQpOworCQlpZiAoIShQY2lDb21tYW5kV29yZCAmIFBDSV9DT01NQU5EX01FTU9SWSkpIHsKKwkJCXByaW50ZigiRXJyb3I6IENhbiBub3QgZW5hYmxlIE1FTSBhY2Nlc3MuXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKCEoUGNpQ29tbWFuZFdvcmQgJiBQQ0lfQ09NTUFORF9NQVNURVIpKSB7CisJCQlwcmludGYoIkVycm9yOiBDYW4gbm90IGVuYWJsZSBCdXMgTWFzdGVyaW5nLlxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCW5pYyA9IChzdHJ1Y3QgZXRoX2RldmljZSAqKSBtYWxsb2Moc2l6ZW9mICgqbmljKSk7CisJCWh3ID0gKHN0cnVjdCBlMTAwMF9odyAqKSBtYWxsb2Moc2l6ZW9mICgqaHcpKTsKKwkJaHctPnBkZXYgPSBkZXZubzsKKwkJbmljLT5wcml2ID0gaHc7CisJCW5pYy0+aW9iYXNlID0gYnVzX3RvX3BoeXMoZGV2bm8sIGlvYmFzZSk7CisKKwkJc3ByaW50ZihuaWMtPm5hbWUsICJlMTAwMCMlZCIsIGNhcmRfbnVtYmVyKTsKKworCQkvKiBBcmUgdGhlc2UgdmFyaWFibGVzIG5lZWRlZD8gKi8KKyNpZiAwCisJCWh3LT5mYyA9IGUxMDAwX2ZjX25vbmU7CisJCWh3LT5vcmlnaW5hbF9mYyA9IGUxMDAwX2ZjX25vbmU7CisjZWxzZQorCQlody0+ZmMgPSBlMTAwMF9mY19kZWZhdWx0OworCQlody0+b3JpZ2luYWxfZmMgPSBlMTAwMF9mY19kZWZhdWx0OworI2VuZGlmCisJCWh3LT5hdXRvbmVnX2ZhaWxlZCA9IDA7CisJCWh3LT5nZXRfbGlua19zdGF0dXMgPSBUUlVFOworCQlody0+aHdfYWRkciA9ICh0eXBlb2YoaHctPmh3X2FkZHIpKSBpb2Jhc2U7CisJCWh3LT5tYWNfdHlwZSA9IGUxMDAwX3VuZGVmaW5lZDsKKworCQkvKiBNQUMgYW5kIFBoeSBzZXR0aW5ncyAqLworCQlpZiAoZTEwMDBfc3dfaW5pdChuaWMsIGNhcmRfbnVtYmVyKSA8IDApIHsKKwkJCWZyZWUoaHcpOworCQkJZnJlZShuaWMpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGUxMDAwX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bShuaWMpIDwgMCkgeworCQkJcHJpbnRmKCJUaGUgRUVQUk9NIENoZWNrc3VtIElzIE5vdCBWYWxpZFxuIik7CisJCQlmcmVlKGh3KTsKKwkJCWZyZWUobmljKTsKKwkJCXJldHVybiAwOworCQl9CisJCWUxMDAwX3JlYWRfbWFjX2FkZHIobmljKTsKKworCQlFMTAwMF9XUklURV9SRUcoaHcsIFBCQSwgRTEwMDBfREVGQVVMVF9QQkEpOworCisJCXByaW50ZigiZTEwMDA6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkgICAgICAgbmljLT5lbmV0YWRkclswXSwgbmljLT5lbmV0YWRkclsxXSwgbmljLT5lbmV0YWRkclsyXSwKKwkJICAgICAgIG5pYy0+ZW5ldGFkZHJbM10sIG5pYy0+ZW5ldGFkZHJbNF0sIG5pYy0+ZW5ldGFkZHJbNV0pOworCisJCW5pYy0+aW5pdCA9IGUxMDAwX2luaXQ7CisJCW5pYy0+cmVjdiA9IGUxMDAwX3BvbGw7CisJCW5pYy0+c2VuZCA9IGUxMDAwX3RyYW5zbWl0OworCQluaWMtPmhhbHQgPSBlMTAwMF9kaXNhYmxlOworCisJCWV0aF9yZWdpc3RlcihuaWMpOworCisJCWNhcmRfbnVtYmVyKys7CisJfQorCXJldHVybiAxOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZTEwMDAuaCBiL2RyaXZlcnMvZTEwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTA1YWMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lMTAwMC5oCkBAIC0wLDAgKzEsMTc1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDAyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgCisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIAorICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCAKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIAorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIAorICBtb3JlIGRldGFpbHMuCisgIAorICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSAKKyAgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgIAorICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAgCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIExpbnV4IE5JQ1MgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGUxMDAwX2h3LmgKKyAqIFN0cnVjdHVyZXMsIGVudW1zLCBhbmQgbWFjcm9zIGZvciB0aGUgTUFDCisgKi8KKworI2lmbmRlZiBfRTEwMDBfSFdfSF8KKyNkZWZpbmUgX0UxMDAwX0hXX0hfCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxuZXQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxwY2kuaD4KKworI2RlZmluZSBFMTAwMF9FUlIoYXJncy4uLikgcHJpbnRmKCJlMTAwMDogIiBhcmdzKQorCisjaWZkZWYgRTEwMDBfREVCVUcKKyNkZWZpbmUgRTEwMDBfREJHKGFyZ3MuLi4pCXByaW50ZigiZTEwMDA6ICIgYXJncykKKyNkZWZpbmUgREVCVUdPVVQoZm10LGFyZ3MuLi4pIHByaW50ZihmbXQgLCMjYXJncykKKyNkZWZpbmUgREVCVUdGVU5DKCkgICAgICAgIHByaW50ZigiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisjZWxzZQorI2RlZmluZSBFMTAwMF9EQkcoYXJncy4uLikKKyNkZWZpbmUgREVCVUdGVU5DKCkKKyNkZWZpbmUgREVCVUdPVVQoZm10LGFyZ3MuLi4pCisjZW5kaWYKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgb2Ygc3RydWN0dXJlcyB1c2VkIGJ5IHRoZSBzaGFyZWQgY29kZSAqLworc3RydWN0IGUxMDAwX2h3Oworc3RydWN0IGUxMDAwX2h3X3N0YXRzOworCit0eXBlZGVmIGVudW0geworCUZBTFNFID0gMCwKKwlUUlVFID0gMQorfSBib29sZWFuX3Q7CisKKy8qIEVudW1lcmF0ZWQgdHlwZXMgc3BlY2lmaWMgdG8gdGhlIGUxMDAwIGhhcmR3YXJlICovCisvKiBNZWRpYSBBY2Nlc3MgQ29udHJvbGVycyAqLwordHlwZWRlZiBlbnVtIHsKKwllMTAwMF91bmRlZmluZWQgPSAwLAorCWUxMDAwXzgyNTQyX3JldjJfMCwKKwllMTAwMF84MjU0Ml9yZXYyXzEsCisJZTEwMDBfODI1NDMsCisJZTEwMDBfODI1NDQsCisJZTEwMDBfODI1NDAsCisJZTEwMDBfODI1NDUsCisJZTEwMDBfODI1NDYsCisJZTEwMDBfbnVtX21hY3MKK30gZTEwMDBfbWFjX3R5cGU7CisKKy8qIE1lZGlhIFR5cGVzICovCit0eXBlZGVmIGVudW0geworCWUxMDAwX21lZGlhX3R5cGVfY29wcGVyID0gMCwKKwllMTAwMF9tZWRpYV90eXBlX2ZpYmVyID0gMSwKKwllMTAwMF9udW1fbWVkaWFfdHlwZXMKK30gZTEwMDBfbWVkaWFfdHlwZTsKKwordHlwZWRlZiBlbnVtIHsKKwllMTAwMF8xMF9oYWxmID0gMCwKKwllMTAwMF8xMF9mdWxsID0gMSwKKwllMTAwMF8xMDBfaGFsZiA9IDIsCisJZTEwMDBfMTAwX2Z1bGwgPSAzCit9IGUxMDAwX3NwZWVkX2R1cGxleF90eXBlOworCit0eXBlZGVmIGVudW0geworCWUxMDAwX2xhbl9hID0gMCwKKwllMTAwMF9sYW5fYiA9IDEKK30gZTEwMDBfbGFuX2xvYzsKKworLyogRmxvdyBDb250cm9sIFNldHRpbmdzICovCit0eXBlZGVmIGVudW0geworCWUxMDAwX2ZjX25vbmUgPSAwLAorCWUxMDAwX2ZjX3J4X3BhdXNlID0gMSwKKwllMTAwMF9mY190eF9wYXVzZSA9IDIsCisJZTEwMDBfZmNfZnVsbCA9IDMsCisJZTEwMDBfZmNfZGVmYXVsdCA9IDB4RkYKK30gZTEwMDBfZmNfdHlwZTsKKworLyogUENJIGJ1cyB0eXBlcyAqLwordHlwZWRlZiBlbnVtIHsKKwllMTAwMF9idXNfdHlwZV91bmtub3duID0gMCwKKwllMTAwMF9idXNfdHlwZV9wY2ksCisJZTEwMDBfYnVzX3R5cGVfcGNpeAorfSBlMTAwMF9idXNfdHlwZTsKKworLyogUENJIGJ1cyBzcGVlZHMgKi8KK3R5cGVkZWYgZW51bSB7CisJZTEwMDBfYnVzX3NwZWVkX3Vua25vd24gPSAwLAorCWUxMDAwX2J1c19zcGVlZF8zMywKKwllMTAwMF9idXNfc3BlZWRfNjYsCisJZTEwMDBfYnVzX3NwZWVkXzEwMCwKKwllMTAwMF9idXNfc3BlZWRfMTMzLAorCWUxMDAwX2J1c19zcGVlZF9yZXNlcnZlZAorfSBlMTAwMF9idXNfc3BlZWQ7CisKKy8qIFBDSSBidXMgd2lkdGhzICovCit0eXBlZGVmIGVudW0geworCWUxMDAwX2J1c193aWR0aF91bmtub3duID0gMCwKKwllMTAwMF9idXNfd2lkdGhfMzIsCisJZTEwMDBfYnVzX3dpZHRoXzY0Cit9IGUxMDAwX2J1c193aWR0aDsKKworLyogUEhZIHN0YXR1cyBpbmZvIHN0cnVjdHVyZSBhbmQgc3VwcG9ydGluZyBlbnVtcyAqLwordHlwZWRlZiBlbnVtIHsKKwllMTAwMF9jYWJsZV9sZW5ndGhfNTAgPSAwLAorCWUxMDAwX2NhYmxlX2xlbmd0aF81MF84MCwKKwllMTAwMF9jYWJsZV9sZW5ndGhfODBfMTEwLAorCWUxMDAwX2NhYmxlX2xlbmd0aF8xMTBfMTQwLAorCWUxMDAwX2NhYmxlX2xlbmd0aF8xNDAsCisJZTEwMDBfY2FibGVfbGVuZ3RoX3VuZGVmaW5lZCA9IDB4RkYKK30gZTEwMDBfY2FibGVfbGVuZ3RoOworCit0eXBlZGVmIGVudW0geworCWUxMDAwXzEwYnRfZXh0X2Rpc3RfZW5hYmxlX25vcm1hbCA9IDAsCisJZTEwMDBfMTBidF9leHRfZGlzdF9lbmFibGVfbG93ZXIsCisJZTEwMDBfMTBidF9leHRfZGlzdF9lbmFibGVfdW5kZWZpbmVkID0gMHhGRgorfSBlMTAwMF8xMGJ0X2V4dF9kaXN0X2VuYWJsZTsKKwordHlwZWRlZiBlbnVtIHsKKwllMTAwMF9yZXZfcG9sYXJpdHlfbm9ybWFsID0gMCwKKwllMTAwMF9yZXZfcG9sYXJpdHlfcmV2ZXJzZWQsCisJZTEwMDBfcmV2X3BvbGFyaXR5X3VuZGVmaW5lZCA9IDB4RkYKK30gZTEwMDBfcmV2X3BvbGFyaXR5OworCit0eXBlZGVmIGVudW0geworCWUxMDAwX3BvbGFyaXR5X3JldmVyc2FsX2VuYWJsZWQgPSAwLAorCWUxMDAwX3BvbGFyaXR5X3JldmVyc2FsX2Rpc2FibGVkLAorCWUxMDAwX3BvbGFyaXR5X3JldmVyc2FsX3VuZGVmaW5lZCA9IDB4RkYKK30gZTEwMDBfcG9sYXJpdHlfcmV2ZXJzYWw7CisKK3R5cGVkZWYgZW51bSB7CisJZTEwMDBfYXV0b194X21vZGVfbWFudWFsX21kaSA9IDAsCisJZTEwMDBfYXV0b194X21vZGVfbWFudWFsX21kaXgsCisJZTEwMDBfYXV0b194X21vZGVfYXV0bzEsCisJZTEwMDBfYXV0b194X21vZGVfYXV0bzIsCisJZTEwMDBfYXV0b194X21vZGVfdW5kZWZpbmVkID0gMHhGRgorfSBlMTAwMF9hdXRvX3hfbW9kZTsKKwordHlwZWRlZiBlbnVtIHsKKwllMTAwMF8xMDAwdF9yeF9zdGF0dXNfbm90X29rID0gMCwKKwllMTAwMF8xMDAwdF9yeF9zdGF0dXNfb2ssCisJZTEwMDBfMTAwMHRfcnhfc3RhdHVzX3VuZGVmaW5lZCA9IDB4RkYKK30gZTEwMDBfMTAwMHRfcnhfc3RhdHVzOworCitzdHJ1Y3QgZTEwMDBfcGh5X2luZm8geworCWUxMDAwX2NhYmxlX2xlbmd0aCBjYWJsZV9sZW5ndGg7CisJZTEwMDBfMTBidF9leHRfZGlzdF9lbmFibGUgZXh0ZW5kZWRfMTBidF9kaXN0YW5jZTsKKwllMTAwMF9yZXZfcG9sYXJpdHkgY2FibGVfcG9sYXJpdHk7CisJZTEwMDBfcG9sYXJpdHlfcmV2ZXJzYWwgcG9sYXJpdHlfY29ycmVjdGlvbjsKKwllMTAwMF9hdXRvX3hfbW9kZSBtZGl4X21vZGU7CisJZTEwMDBfMTAwMHRfcnhfc3RhdHVzIGxvY2FsX3J4OworCWUxMDAwXzEwMDB0X3J4X3N0YXR1cyByZW1vdGVfcng7Cit9OworCitzdHJ1Y3QgZTEwMDBfcGh5X3N0YXRzIHsKKwl1aW50MzJfdCBpZGxlX2Vycm9yczsKKwl1aW50MzJfdCByZWNlaXZlX2Vycm9yczsKK307CisKKy8qIEVycm9yIENvZGVzICovCisjZGVmaW5lIEUxMDAwX1NVQ0NFU1MgICAgICAwCisjZGVmaW5lIEUxMDAwX0VSUl9FRVBST00gICAxCisjZGVmaW5lIEUxMDAwX0VSUl9QSFkgICAgICAyCisjZGVmaW5lIEUxMDAwX0VSUl9DT05GSUcgICAzCisjZGVmaW5lIEUxMDAwX0VSUl9QQVJBTSAgICA0CisjZGVmaW5lIEUxMDAwX0VSUl9NQUNfVFlQRSA1CisjZGVmaW5lIEUxMDAwX0VSUl9OT0xJTksgICA2CisjZGVmaW5lIEUxMDAwX0VSUl9USU1FT1VUICA3CisKKy8qIFBDSSBEZXZpY2UgSURzICovCisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU0MiAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTQzR0NfRklCRVIgIDB4MTAwMQorI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NDNHQ19DT1BQRVIgMHgxMDA0CisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU0NEVJX0NPUFBFUiAweDEwMDgKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTQ0RUlfRklCRVIgIDB4MTAwOQorI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NDRHQ19DT1BQRVIgMHgxMDBDCisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU0NEdDX0xPTSAgICAweDEwMEQKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTQwRU0gICAgICAgIDB4MTAwRQorI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NDBFTV9MT00gICAgMHgxMDE1CisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU0NUVNX0NPUFBFUiAweDEwMEYKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTQ1RU1fRklCRVIgIDB4MTAxMQorI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NDZFQl9DT1BQRVIgMHgxMDEwCisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU0NkVCX0ZJQkVSICAweDEwMTIKKyNkZWZpbmUgTlVNX0RFVl9JRFMgMTMKKworI2RlZmluZSBOT0RFX0FERFJFU1NfU0laRSA2CisjZGVmaW5lIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyA2CisKKy8qIE1BQyBkZWNvZGUgc2l6ZSBpcyAxMjhLIC0gVGhpcyBpcyB0aGUgc2l6ZSBvZiBCQVIwICovCisjZGVmaW5lIE1BQ19ERUNPREVfU0laRSAoMTI4ICogMTAyNCkKKworI2RlZmluZSBFMTAwMF84MjU0Ml8yXzBfUkVWX0lEIDIKKyNkZWZpbmUgRTEwMDBfODI1NDJfMl8xX1JFVl9JRCAzCisKKyNkZWZpbmUgU1BFRURfMTAgICAgMTAKKyNkZWZpbmUgU1BFRURfMTAwICAgMTAwCisjZGVmaW5lIFNQRUVEXzEwMDAgIDEwMDAKKyNkZWZpbmUgSEFMRl9EVVBMRVggMQorI2RlZmluZSBGVUxMX0RVUExFWCAyCisKKy8qIFRoZSBzaXplcyAoaW4gYnl0ZXMpIG9mIGEgZXRoZXJuZXQgcGFja2V0ICovCisjZGVmaW5lIEVORVRfSEVBREVSX1NJWkUgICAgICAgICAgICAgMTQKKyNkZWZpbmUgTUFYSU1VTV9FVEhFUk5FVF9GUkFNRV9TSVpFICAxNTE4CS8qIFdpdGggRkNTICovCisjZGVmaW5lIE1JTklNVU1fRVRIRVJORVRfRlJBTUVfU0laRSAgNjQJLyogV2l0aCBGQ1MgKi8KKyNkZWZpbmUgRVRIRVJORVRfRkNTX1NJWkUgICAgICAgICAgICA0CisjZGVmaW5lIE1BWElNVU1fRVRIRVJORVRfUEFDS0VUX1NJWkUgXAorICAgIChNQVhJTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUgLSBFVEhFUk5FVF9GQ1NfU0laRSkKKyNkZWZpbmUgTUlOSU1VTV9FVEhFUk5FVF9QQUNLRVRfU0laRSBcCisgICAgKE1JTklNVU1fRVRIRVJORVRfRlJBTUVfU0laRSAtIEVUSEVSTkVUX0ZDU19TSVpFKQorI2RlZmluZSBDUkNfTEVOR1RIICAgICAgICAgICAgICAgICAgIEVUSEVSTkVUX0ZDU19TSVpFCisjZGVmaW5lIE1BWF9KVU1CT19GUkFNRV9TSVpFICAgICAgICAgMHgzRjAwCisKKy8qIDgwMi4xcSBWTEFOIFBhY2tldCBTaXplcyAqLworI2RlZmluZSBWTEFOX1RBR19TSVpFICAgICAgICAgICAgICAgICAgICAgNAkvKiA4MDIuM2FjIHRhZyAobm90IERNQWVkKSAqLworCisvKiBFdGhlcnR5cGUgZmllbGQgdmFsdWVzICovCisjZGVmaW5lIEVUSEVSTkVUX0lFRUVfVkxBTl9UWVBFIDB4ODEwMAkvKiA4MDIuM2FjIHBhY2tldCAqLworI2RlZmluZSBFVEhFUk5FVF9JUF9UWVBFICAgICAgICAweDA4MDAJLyogSVAgcGFja2V0cyAqLworI2RlZmluZSBFVEhFUk5FVF9BUlBfVFlQRSAgICAgICAweDA4MDYJLyogQWRkcmVzcyBSZXNvbHV0aW9uIFByb3RvY29sIChBUlApICovCisKKy8qIFBhY2tldCBIZWFkZXIgZGVmaW5lcyAqLworI2RlZmluZSBJUF9QUk9UT0NPTF9UQ1AgICAgNgorI2RlZmluZSBJUF9QUk9UT0NPTF9VRFAgICAgMHgxMQorCisvKiBUaGlzIGRlZmluZXMgdGhlIGJpdHMgdGhhdCBhcmUgc2V0IGluIHRoZSBJbnRlcnJ1cHQgTWFzaworICogU2V0L1JlYWQgUmVnaXN0ZXIuICBFYWNoIGJpdCBpcyBkb2N1bWVudGVkIGJlbG93OgorICogICBvIFJYRE1UMCA9IFJlY2VpdmUgRGVzY3JpcHRvciBNaW5pbXVtIFRocmVzaG9sZCBoaXQgKHJpbmcgMCkKKyAqICAgbyBSWFNFUSAgPSBSZWNlaXZlIFNlcXVlbmNlIEVycm9yIAorICovCisjZGVmaW5lIFBPTExfSU1TX0VOQUJMRV9NQVNLICggXAorICAgIEUxMDAwX0lNU19SWERNVDAgfCAgICAgICAgIFwKKyAgICBFMTAwMF9JTVNfUlhTRVEpCisKKy8qIFRoaXMgZGVmaW5lcyB0aGUgYml0cyB0aGF0IGFyZSBzZXQgaW4gdGhlIEludGVycnVwdCBNYXNrCisgKiBTZXQvUmVhZCBSZWdpc3Rlci4gIEVhY2ggYml0IGlzIGRvY3VtZW50ZWQgYmVsb3c6CisgKiAgIG8gUlhUMCAgID0gUmVjZWl2ZXIgVGltZXIgSW50ZXJydXB0IChyaW5nIDApCisgKiAgIG8gVFhEVyAgID0gVHJhbnNtaXQgRGVzY3JpcHRvciBXcml0dGVuIEJhY2sKKyAqICAgbyBSWERNVDAgPSBSZWNlaXZlIERlc2NyaXB0b3IgTWluaW11bSBUaHJlc2hvbGQgaGl0IChyaW5nIDApCisgKiAgIG8gUlhTRVEgID0gUmVjZWl2ZSBTZXF1ZW5jZSBFcnJvcgorICogICBvIExTQyAgICA9IExpbmsgU3RhdHVzIENoYW5nZQorICovCisjZGVmaW5lIElNU19FTkFCTEVfTUFTSyAoIFwKKyAgICBFMTAwMF9JTVNfUlhUMCAgIHwgICAgXAorICAgIEUxMDAwX0lNU19UWERXICAgfCAgICBcCisgICAgRTEwMDBfSU1TX1JYRE1UMCB8ICAgIFwKKyAgICBFMTAwMF9JTVNfUlhTRVEgIHwgICAgXAorICAgIEUxMDAwX0lNU19MU0MpCisKKy8qIFRoZSBudW1iZXIgb2YgaGlnaC9sb3cgcmVnaXN0ZXIgcGFpcnMgaW4gdGhlIFJBUi4gVGhlIFJBUiAoUmVjZWl2ZSBBZGRyZXNzCisgKiBSZWdpc3RlcnMpIGhvbGRzIHRoZSBkaXJlY3RlZCBhbmQgbXVsdGljYXN0IGFkZHJlc3NlcyB0aGF0IHdlIG1vbml0b3IuIFdlCisgKiByZXNlcnZlIG9uZSBvZiB0aGVzZSBzcG90cyBmb3Igb3VyIGRpcmVjdGVkIGFkZHJlc3MsIGFsbG93aW5nIHVzIHJvb20gZm9yCisgKiBFMTAwMF9SQVJfRU5UUklFUyAtIDEgbXVsdGljYXN0IGFkZHJlc3Nlcy4gCisgKi8KKyNkZWZpbmUgRTEwMDBfUkFSX0VOVFJJRVMgMTYKKworI2RlZmluZSBNSU5fTlVNQkVSX09GX0RFU0NSSVBUT1JTIDgKKyNkZWZpbmUgTUFYX05VTUJFUl9PRl9ERVNDUklQVE9SUyAweEZGRjgKKworLyogUmVjZWl2ZSBEZXNjcmlwdG9yICovCitzdHJ1Y3QgZTEwMDBfcnhfZGVzYyB7CisJdWludDY0X3QgYnVmZmVyX2FkZHI7CS8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqLworCXVpbnQxNl90IGxlbmd0aDsJLyogTGVuZ3RoIG9mIGRhdGEgRE1BZWQgaW50byBkYXRhIGJ1ZmZlciAqLworCXVpbnQxNl90IGNzdW07CQkvKiBQYWNrZXQgY2hlY2tzdW0gKi8KKwl1aW50OF90IHN0YXR1czsJCS8qIERlc2NyaXB0b3Igc3RhdHVzICovCisJdWludDhfdCBlcnJvcnM7CQkvKiBEZXNjcmlwdG9yIEVycm9ycyAqLworCXVpbnQxNl90IHNwZWNpYWw7Cit9OworCisvKiBSZWNlaXZlIERlY3JpcHRvciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfREQgICAgICAgMHgwMQkvKiBEZXNjcmlwdG9yIERvbmUgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfRU9QICAgICAgMHgwMgkvKiBFbmQgb2YgUGFja2V0ICovCisjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX0lYU00gICAgIDB4MDQJLyogSWdub3JlIGNoZWNrc3VtICovCisjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX1ZQICAgICAgIDB4MDgJLyogSUVFRSBWTEFOIFBhY2tldCAqLworI2RlZmluZSBFMTAwMF9SWERfU1RBVF9UQ1BDUyAgICAweDIwCS8qIFRDUCB4c3VtIGNhbGN1bGF0ZWQgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfSVBDUyAgICAgMHg0MAkvKiBJUCB4c3VtIGNhbGN1bGF0ZWQgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfUElGICAgICAgMHg4MAkvKiBwYXNzZWQgaW4tZXhhY3QgZmlsdGVyICovCisjZGVmaW5lIEUxMDAwX1JYRF9FUlJfQ0UgICAgICAgIDB4MDEJLyogQ1JDIEVycm9yICovCisjZGVmaW5lIEUxMDAwX1JYRF9FUlJfU0UgICAgICAgIDB4MDIJLyogU3ltYm9sIEVycm9yICovCisjZGVmaW5lIEUxMDAwX1JYRF9FUlJfU0VRICAgICAgIDB4MDQJLyogU2VxdWVuY2UgRXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX0VSUl9DWEUgICAgICAgMHgxMAkvKiBDYXJyaWVyIEV4dGVuc2lvbiBFcnJvciAqLworI2RlZmluZSBFMTAwMF9SWERfRVJSX1RDUEUgICAgICAweDIwCS8qIFRDUC9VRFAgQ2hlY2tzdW0gRXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX0VSUl9JUEUgICAgICAgMHg0MAkvKiBJUCBDaGVja3N1bSBFcnJvciAqLworI2RlZmluZSBFMTAwMF9SWERfRVJSX1JYRSAgICAgICAweDgwCS8qIFJ4IERhdGEgRXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX1NQQ19WTEFOX01BU0sgMHgwRkZGCS8qIFZMQU4gSUQgaXMgaW4gbG93ZXIgMTIgYml0cyAqLworI2RlZmluZSBFMTAwMF9SWERfU1BDX1BSSV9NQVNLICAweEUwMDAJLyogUHJpb3JpdHkgaXMgaW4gdXBwZXIgMyBiaXRzICovCisjZGVmaW5lIEUxMDAwX1JYRF9TUENfUFJJX1NISUZUIDB4MDAwRAkvKiBQcmlvcml0eSBpcyBpbiB1cHBlciAzIG9mIDE2ICovCisjZGVmaW5lIEUxMDAwX1JYRF9TUENfQ0ZJX01BU0sgIDB4MTAwMAkvKiBDRkkgaXMgYml0IDEyICovCisjZGVmaW5lIEUxMDAwX1JYRF9TUENfQ0ZJX1NISUZUIDB4MDAwQwkvKiBDRkkgaXMgYml0IDEyICovCisKKy8qIG1hc2sgdG8gZGV0ZXJtaW5lIGlmIHBhY2tldHMgc2hvdWxkIGJlIGRyb3BwZWQgZHVlIHRvIGZyYW1lIGVycm9ycyAqLworI2RlZmluZSBFMTAwMF9SWERfRVJSX0ZSQU1FX0VSUl9NQVNLICggXAorICAgIEUxMDAwX1JYRF9FUlJfQ0UgIHwgICAgICAgICAgICAgICAgXAorICAgIEUxMDAwX1JYRF9FUlJfU0UgIHwgICAgICAgICAgICAgICAgXAorICAgIEUxMDAwX1JYRF9FUlJfU0VRIHwgICAgICAgICAgICAgICAgXAorICAgIEUxMDAwX1JYRF9FUlJfQ1hFIHwgICAgICAgICAgICAgICAgXAorICAgIEUxMDAwX1JYRF9FUlJfUlhFKQorCisvKiBUcmFuc21pdCBEZXNjcmlwdG9yICovCitzdHJ1Y3QgZTEwMDBfdHhfZGVzYyB7CisJdWludDY0X3QgYnVmZmVyX2FkZHI7CS8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqLworCXVuaW9uIHsKKwkJdWludDMyX3QgZGF0YTsKKwkJc3RydWN0IHsKKwkJCXVpbnQxNl90IGxlbmd0aDsJLyogRGF0YSBidWZmZXIgbGVuZ3RoICovCisJCQl1aW50OF90IGNzbzsJLyogQ2hlY2tzdW0gb2Zmc2V0ICovCisJCQl1aW50OF90IGNtZDsJLyogRGVzY3JpcHRvciBjb250cm9sICovCisJCX0gZmxhZ3M7CisJfSBsb3dlcjsKKwl1bmlvbiB7CisJCXVpbnQzMl90IGRhdGE7CisJCXN0cnVjdCB7CisJCQl1aW50OF90IHN0YXR1czsJLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KKwkJCXVpbnQ4X3QgY3NzOwkvKiBDaGVja3N1bSBzdGFydCAqLworCQkJdWludDE2X3Qgc3BlY2lhbDsKKwkJfSBmaWVsZHM7CisJfSB1cHBlcjsKK307CisKKy8qIFRyYW5zbWl0IERlc2NyaXB0b3IgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIEUxMDAwX1RYRF9EVFlQX0QgICAgIDB4MDAxMDAwMDAJLyogRGF0YSBEZXNjcmlwdG9yICovCisjZGVmaW5lIEUxMDAwX1RYRF9EVFlQX0MgICAgIDB4MDAwMDAwMDAJLyogQ29udGV4dCBEZXNjcmlwdG9yICovCisjZGVmaW5lIEUxMDAwX1RYRF9QT1BUU19JWFNNIDB4MDEJLyogSW5zZXJ0IElQIGNoZWNrc3VtICovCisjZGVmaW5lIEUxMDAwX1RYRF9QT1BUU19UWFNNIDB4MDIJLyogSW5zZXJ0IFRDUC9VRFAgY2hlY2tzdW0gKi8KKyNkZWZpbmUgRTEwMDBfVFhEX0NNRF9FT1AgICAgMHgwMTAwMDAwMAkvKiBFbmQgb2YgUGFja2V0ICovCisjZGVmaW5lIEUxMDAwX1RYRF9DTURfSUZDUyAgIDB4MDIwMDAwMDAJLyogSW5zZXJ0IEZDUyAoRXRoZXJuZXQgQ1JDKSAqLworI2RlZmluZSBFMTAwMF9UWERfQ01EX0lDICAgICAweDA0MDAwMDAwCS8qIEluc2VydCBDaGVja3N1bSAqLworI2RlZmluZSBFMTAwMF9UWERfQ01EX1JTICAgICAweDA4MDAwMDAwCS8qIFJlcG9ydCBTdGF0dXMgKi8KKyNkZWZpbmUgRTEwMDBfVFhEX0NNRF9SUFMgICAgMHgxMDAwMDAwMAkvKiBSZXBvcnQgUGFja2V0IFNlbnQgKi8KKyNkZWZpbmUgRTEwMDBfVFhEX0NNRF9ERVhUICAgMHgyMDAwMDAwMAkvKiBEZXNjcmlwdG9yIGV4dGVuc2lvbiAoMCA9IGxlZ2FjeSkgKi8KKyNkZWZpbmUgRTEwMDBfVFhEX0NNRF9WTEUgICAgMHg0MDAwMDAwMAkvKiBBZGQgVkxBTiB0YWcgKi8KKyNkZWZpbmUgRTEwMDBfVFhEX0NNRF9JREUgICAgMHg4MDAwMDAwMAkvKiBFbmFibGUgVGlkdiByZWdpc3RlciAqLworI2RlZmluZSBFMTAwMF9UWERfU1RBVF9ERCAgICAweDAwMDAwMDAxCS8qIERlc2NyaXB0b3IgRG9uZSAqLworI2RlZmluZSBFMTAwMF9UWERfU1RBVF9FQyAgICAweDAwMDAwMDAyCS8qIEV4Y2VzcyBDb2xsaXNpb25zICovCisjZGVmaW5lIEUxMDAwX1RYRF9TVEFUX0xDICAgIDB4MDAwMDAwMDQJLyogTGF0ZSBDb2xsaXNpb25zICovCisjZGVmaW5lIEUxMDAwX1RYRF9TVEFUX1RVICAgIDB4MDAwMDAwMDgJLyogVHJhbnNtaXQgdW5kZXJydW4gKi8KKyNkZWZpbmUgRTEwMDBfVFhEX0NNRF9UQ1AgICAgMHgwMTAwMDAwMAkvKiBUQ1AgcGFja2V0ICovCisjZGVmaW5lIEUxMDAwX1RYRF9DTURfSVAgICAgIDB4MDIwMDAwMDAJLyogSVAgcGFja2V0ICovCisjZGVmaW5lIEUxMDAwX1RYRF9DTURfVFNFICAgIDB4MDQwMDAwMDAJLyogVENQIFNlZyBlbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfVFhEX1NUQVRfVEMgICAgMHgwMDAwMDAwNAkvKiBUeCBVbmRlcnJ1biAqLworCisvKiBPZmZsb2FkIENvbnRleHQgRGVzY3JpcHRvciAqLworc3RydWN0IGUxMDAwX2NvbnRleHRfZGVzYyB7CisJdW5pb24geworCQl1aW50MzJfdCBpcF9jb25maWc7CisJCXN0cnVjdCB7CisJCQl1aW50OF90IGlwY3NzOwkvKiBJUCBjaGVja3N1bSBzdGFydCAqLworCQkJdWludDhfdCBpcGNzbzsJLyogSVAgY2hlY2tzdW0gb2Zmc2V0ICovCisJCQl1aW50MTZfdCBpcGNzZTsJLyogSVAgY2hlY2tzdW0gZW5kICovCisJCX0gaXBfZmllbGRzOworCX0gbG93ZXJfc2V0dXA7CisJdW5pb24geworCQl1aW50MzJfdCB0Y3BfY29uZmlnOworCQlzdHJ1Y3QgeworCQkJdWludDhfdCB0dWNzczsJLyogVENQIGNoZWNrc3VtIHN0YXJ0ICovCisJCQl1aW50OF90IHR1Y3NvOwkvKiBUQ1AgY2hlY2tzdW0gb2Zmc2V0ICovCisJCQl1aW50MTZfdCB0dWNzZTsJLyogVENQIGNoZWNrc3VtIGVuZCAqLworCQl9IHRjcF9maWVsZHM7CisJfSB1cHBlcl9zZXR1cDsKKwl1aW50MzJfdCBjbWRfYW5kX2xlbmd0aDsJLyogKi8KKwl1bmlvbiB7CisJCXVpbnQzMl90IGRhdGE7CisJCXN0cnVjdCB7CisJCQl1aW50OF90IHN0YXR1czsJLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KKwkJCXVpbnQ4X3QgaGRyX2xlbjsJLyogSGVhZGVyIGxlbmd0aCAqLworCQkJdWludDE2X3QgbXNzOwkvKiBNYXhpbXVtIHNlZ21lbnQgc2l6ZSAqLworCQl9IGZpZWxkczsKKwl9IHRjcF9zZWdfc2V0dXA7Cit9OworCisvKiBPZmZsb2FkIGRhdGEgZGVzY3JpcHRvciAqLworc3RydWN0IGUxMDAwX2RhdGFfZGVzYyB7CisJdWludDY0X3QgYnVmZmVyX2FkZHI7CS8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBidWZmZXIgYWRkcmVzcyAqLworCXVuaW9uIHsKKwkJdWludDMyX3QgZGF0YTsKKwkJc3RydWN0IHsKKwkJCXVpbnQxNl90IGxlbmd0aDsJLyogRGF0YSBidWZmZXIgbGVuZ3RoICovCisJCQl1aW50OF90IHR5cF9sZW5fZXh0OwkvKiAqLworCQkJdWludDhfdCBjbWQ7CS8qICovCisJCX0gZmxhZ3M7CisJfSBsb3dlcjsKKwl1bmlvbiB7CisJCXVpbnQzMl90IGRhdGE7CisJCXN0cnVjdCB7CisJCQl1aW50OF90IHN0YXR1czsJLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KKwkJCXVpbnQ4X3QgcG9wdHM7CS8qIFBhY2tldCBPcHRpb25zICovCisJCQl1aW50MTZfdCBzcGVjaWFsOwkvKiAqLworCQl9IGZpZWxkczsKKwl9IHVwcGVyOworfTsKKworLyogRmlsdGVycyAqLworI2RlZmluZSBFMTAwMF9OVU1fVU5JQ0FTVCAgICAgICAgICAxNgkvKiBVbmljYXN0IGZpbHRlciBlbnRyaWVzICovCisjZGVmaW5lIEUxMDAwX01DX1RCTF9TSVpFICAgICAgICAgIDEyOAkvKiBNdWx0aWNhc3QgRmlsdGVyIFRhYmxlICg0MDk2IGJpdHMpICovCisjZGVmaW5lIEUxMDAwX1ZMQU5fRklMVEVSX1RCTF9TSVpFIDEyOAkvKiBWTEFOIEZpbHRlciBUYWJsZSAoNDA5NiBiaXRzKSAqLworCisvKiBSZWNlaXZlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KK3N0cnVjdCBlMTAwMF9yYXIgeworCXZvbGF0aWxlIHVpbnQzMl90IGxvdzsJLyogcmVjZWl2ZSBhZGRyZXNzIGxvdyAqLworCXZvbGF0aWxlIHVpbnQzMl90IGhpZ2g7CS8qIHJlY2VpdmUgYWRkcmVzcyBoaWdoICovCit9OworCisvKiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIE11bHRpY2FzdCBUYWJsZSBBcnJheSAoTVRBKS4gKi8KKyNkZWZpbmUgRTEwMDBfTlVNX01UQV9SRUdJU1RFUlMgMTI4CisKKy8qIElQdjQgQWRkcmVzcyBUYWJsZSBFbnRyeSAqLworc3RydWN0IGUxMDAwX2lwdjRfYXRfZW50cnkgeworCXZvbGF0aWxlIHVpbnQzMl90IGlwdjRfYWRkcjsJLyogSVAgQWRkcmVzcyAoUlcpICovCisJdm9sYXRpbGUgdWludDMyX3QgcmVzZXJ2ZWQ7Cit9OworCisvKiBGb3VyIHdha2V1cCBJUCBhZGRyZXNzZXMgYXJlIHN1cHBvcnRlZCAqLworI2RlZmluZSBFMTAwMF9XQUtFVVBfSVBfQUREUkVTU19DT1VOVF9NQVggNAorI2RlZmluZSBFMTAwMF9JUDRBVF9TSVpFICAgICAgICAgICAgICAgICAgRTEwMDBfV0FLRVVQX0lQX0FERFJFU1NfQ09VTlRfTUFYCisjZGVmaW5lIEUxMDAwX0lQNkFUX1NJWkUgICAgICAgICAgICAgICAgICAxCisKKy8qIElQdjYgQWRkcmVzcyBUYWJsZSBFbnRyeSAqLworc3RydWN0IGUxMDAwX2lwdjZfYXRfZW50cnkgeworCXZvbGF0aWxlIHVpbnQ4X3QgaXB2Nl9hZGRyWzE2XTsKK307CisKKy8qIEZsZXhpYmxlIEZpbHRlciBMZW5ndGggVGFibGUgRW50cnkgKi8KK3N0cnVjdCBlMTAwMF9mZmx0X2VudHJ5IHsKKwl2b2xhdGlsZSB1aW50MzJfdCBsZW5ndGg7CS8qIEZsZXhpYmxlIEZpbHRlciBMZW5ndGggKFJXKSAqLworCXZvbGF0aWxlIHVpbnQzMl90IHJlc2VydmVkOworfTsKKworLyogRmxleGlibGUgRmlsdGVyIE1hc2sgVGFibGUgRW50cnkgKi8KK3N0cnVjdCBlMTAwMF9mZm10X2VudHJ5IHsKKwl2b2xhdGlsZSB1aW50MzJfdCBtYXNrOwkvKiBGbGV4aWJsZSBGaWx0ZXIgTWFzayAoUlcpICovCisJdm9sYXRpbGUgdWludDMyX3QgcmVzZXJ2ZWQ7Cit9OworCisvKiBGbGV4aWJsZSBGaWx0ZXIgVmFsdWUgVGFibGUgRW50cnkgKi8KK3N0cnVjdCBlMTAwMF9mZnZ0X2VudHJ5IHsKKwl2b2xhdGlsZSB1aW50MzJfdCB2YWx1ZTsJLyogRmxleGlibGUgRmlsdGVyIFZhbHVlIChSVykgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCByZXNlcnZlZDsKK307CisKKy8qIEZvdXIgRmxleGlibGUgRmlsdGVycyBhcmUgc3VwcG9ydGVkICovCisjZGVmaW5lIEUxMDAwX0ZMRVhJQkxFX0ZJTFRFUl9DT1VOVF9NQVggNAorCisvKiBFYWNoIEZsZXhpYmxlIEZpbHRlciBpcyBhdCBtb3N0IDEyOCAoMHg4MCkgYnl0ZXMgaW4gbGVuZ3RoICovCisjZGVmaW5lIEUxMDAwX0ZMRVhJQkxFX0ZJTFRFUl9TSVpFX01BWCAgMTI4CisKKyNkZWZpbmUgRTEwMDBfRkZMVF9TSVpFIEUxMDAwX0ZMRVhJQkxFX0ZJTFRFUl9DT1VOVF9NQVgKKyNkZWZpbmUgRTEwMDBfRkZNVF9TSVpFIEUxMDAwX0ZMRVhJQkxFX0ZJTFRFUl9TSVpFX01BWAorI2RlZmluZSBFMTAwMF9GRlZUX1NJWkUgRTEwMDBfRkxFWElCTEVfRklMVEVSX1NJWkVfTUFYCisKKy8qIFJlZ2lzdGVyIFNldC4gKDgyNTQzLCA4MjU0NCkKKyAqCisgKiBSZWdpc3RlcnMgYXJlIGRlZmluZWQgdG8gYmUgMzIgYml0cyBhbmQgIHNob3VsZCBiZSBhY2Nlc3NlZCBhcyAzMiBiaXQgdmFsdWVzLgorICogVGhlc2UgcmVnaXN0ZXJzIGFyZSBwaHlzaWNhbGx5IGxvY2F0ZWQgb24gdGhlIE5JQywgYnV0IGFyZSBtYXBwZWQgaW50byB0aGUgCisgKiBob3N0IG1lbW9yeSBhZGRyZXNzIHNwYWNlLgorICoKKyAqIFJXIC0gcmVnaXN0ZXIgaXMgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUKKyAqIFJPIC0gcmVnaXN0ZXIgaXMgcmVhZCBvbmx5CisgKiBXTyAtIHJlZ2lzdGVyIGlzIHdyaXRlIG9ubHkKKyAqIFIvY2xyIC0gcmVnaXN0ZXIgaXMgcmVhZCBvbmx5IGFuZCBpcyBjbGVhcmVkIHdoZW4gcmVhZAorICogQSAtIHJlZ2lzdGVyIGFycmF5CisgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTCAgICAgMHgwMDAwMAkvKiBEZXZpY2UgQ29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1NUQVRVUyAgIDB4MDAwMDgJLyogRGV2aWNlIFN0YXR1cyAtIFJPICovCisjZGVmaW5lIEUxMDAwX0VFQ0QgICAgIDB4MDAwMTAJLyogRUVQUk9NL0ZsYXNoIENvbnRyb2wgLSBSVyAqLworI2RlZmluZSBFMTAwMF9FRVJEICAgICAweDAwMDE0CS8qIEVFUFJPTSBSZWFkIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFQgMHgwMDAxOAkvKiBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX01ESUMgICAgIDB4MDAwMjAJLyogTURJIENvbnRyb2wgLSBSVyAqLworI2RlZmluZSBFMTAwMF9GQ0FMICAgICAweDAwMDI4CS8qIEZsb3cgQ29udHJvbCBBZGRyZXNzIExvdyAtIFJXICovCisjZGVmaW5lIEUxMDAwX0ZDQUggICAgIDB4MDAwMkMJLyogRmxvdyBDb250cm9sIEFkZHJlc3MgSGlnaCAtUlcgKi8KKyNkZWZpbmUgRTEwMDBfRkNUICAgICAgMHgwMDAzMAkvKiBGbG93IENvbnRyb2wgVHlwZSAtIFJXICovCisjZGVmaW5lIEUxMDAwX1ZFVCAgICAgIDB4MDAwMzgJLyogVkxBTiBFdGhlciBUeXBlIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfSUNSICAgICAgMHgwMDBDMAkvKiBJbnRlcnJ1cHQgQ2F1c2UgUmVhZCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX0lUUiAgICAgIDB4MDAwQzQJLyogSW50ZXJydXB0IFRocm90dGxpbmcgUmF0ZSAtIFJXICovCisjZGVmaW5lIEUxMDAwX0lDUyAgICAgIDB4MDAwQzgJLyogSW50ZXJydXB0IENhdXNlIFNldCAtIFdPICovCisjZGVmaW5lIEUxMDAwX0lNUyAgICAgIDB4MDAwRDAJLyogSW50ZXJydXB0IE1hc2sgU2V0IC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfSU1DICAgICAgMHgwMDBEOAkvKiBJbnRlcnJ1cHQgTWFzayBDbGVhciAtIFdPICovCisjZGVmaW5lIEUxMDAwX1JDVEwgICAgIDB4MDAxMDAJLyogUlggQ29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX0ZDVFRWICAgIDB4MDAxNzAJLyogRmxvdyBDb250cm9sIFRyYW5zbWl0IFRpbWVyIFZhbHVlIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfVFhDVyAgICAgMHgwMDE3OAkvKiBUWCBDb25maWd1cmF0aW9uIFdvcmQgLSBSVyAqLworI2RlZmluZSBFMTAwMF9SWENXICAgICAweDAwMTgwCS8qIFJYIENvbmZpZ3VyYXRpb24gV29yZCAtIFJPICovCisjZGVmaW5lIEUxMDAwX1RDVEwgICAgIDB4MDA0MDAJLyogVFggQ29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1RJUEcgICAgIDB4MDA0MTAJLyogVFggSW50ZXItcGFja2V0IGdhcCAtUlcgKi8KKyNkZWZpbmUgRTEwMDBfVEJUICAgICAgMHgwMDQ0OAkvKiBUWCBCdXJzdCBUaW1lciAtIFJXICovCisjZGVmaW5lIEUxMDAwX0FJVCAgICAgIDB4MDA0NTgJLyogQWRhcHRpdmUgSW50ZXJmcmFtZSBTcGFjaW5nIFRocm90dGxlIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfTEVEQ1RMICAgMHgwMEUwMAkvKiBMRUQgQ29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1BCQSAgICAgIDB4MDEwMDAJLyogUGFja2V0IEJ1ZmZlciBBbGxvY2F0aW9uIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfRkNSVEwgICAgMHgwMjE2MAkvKiBGbG93IENvbnRyb2wgUmVjZWl2ZSBUaHJlc2hvbGQgTG93IC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfRkNSVEggICAgMHgwMjE2OAkvKiBGbG93IENvbnRyb2wgUmVjZWl2ZSBUaHJlc2hvbGQgSGlnaCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1JEQkFMICAgIDB4MDI4MDAJLyogUlggRGVzY3JpcHRvciBCYXNlIEFkZHJlc3MgTG93IC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfUkRCQUggICAgMHgwMjgwNAkvKiBSWCBEZXNjcmlwdG9yIEJhc2UgQWRkcmVzcyBIaWdoIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfUkRMRU4gICAgMHgwMjgwOAkvKiBSWCBEZXNjcmlwdG9yIExlbmd0aCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1JESCAgICAgIDB4MDI4MTAJLyogUlggRGVzY3JpcHRvciBIZWFkIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfUkRUICAgICAgMHgwMjgxOAkvKiBSWCBEZXNjcmlwdG9yIFRhaWwgLSBSVyAqLworI2RlZmluZSBFMTAwMF9SRFRSICAgICAweDAyODIwCS8qIFJYIERlbGF5IFRpbWVyIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfUlhEQ1RMICAgMHgwMjgyOAkvKiBSWCBEZXNjcmlwdG9yIENvbnRyb2wgLSBSVyAqLworI2RlZmluZSBFMTAwMF9SQURWICAgICAweDAyODJDCS8qIFJYIEludGVycnVwdCBBYnNvbHV0ZSBEZWxheSBUaW1lciAtIFJXICovCisjZGVmaW5lIEUxMDAwX1JTUlBEICAgIDB4MDJDMDAJLyogUlggU21hbGwgUGFja2V0IERldGVjdCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1RYRE1BQyAgIDB4MDMwMDAJLyogVFggRE1BIENvbnRyb2wgLSBSVyAqLworI2RlZmluZSBFMTAwMF9UREJBTCAgICAweDAzODAwCS8qIFRYIERlc2NyaXB0b3IgQmFzZSBBZGRyZXNzIExvdyAtIFJXICovCisjZGVmaW5lIEUxMDAwX1REQkFIICAgIDB4MDM4MDQJLyogVFggRGVzY3JpcHRvciBCYXNlIEFkZHJlc3MgSGlnaCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1RETEVOICAgIDB4MDM4MDgJLyogVFggRGVzY3JpcHRvciBMZW5ndGggLSBSVyAqLworI2RlZmluZSBFMTAwMF9UREggICAgICAweDAzODEwCS8qIFRYIERlc2NyaXB0b3IgSGVhZCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1REVCAgICAgIDB4MDM4MTgJLyogVFggRGVzY3JpcG90ciBUYWlsIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfVElEViAgICAgMHgwMzgyMAkvKiBUWCBJbnRlcnJ1cHQgRGVsYXkgVmFsdWUgLSBSVyAqLworI2RlZmluZSBFMTAwMF9UWERDVEwgICAweDAzODI4CS8qIFRYIERlc2NyaXB0b3IgQ29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1RBRFYgICAgIDB4MDM4MkMJLyogVFggSW50ZXJydXB0IEFic29sdXRlIERlbGF5IFZhbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1RTUE1UICAgIDB4MDM4MzAJLyogVENQIFNlZ21lbnRhdGlvbiBQQUQgJiBNaW4gVGhyZXNob2xkIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfQ1JDRVJSUyAgMHgwNDAwMAkvKiBDUkMgRXJyb3IgQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9BTEdORVJSQyAweDA0MDA0CS8qIEFsaWdubWVudCBFcnJvciBDb3VudCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1NZTUVSUlMgIDB4MDQwMDgJLyogU3ltYm9sIEVycm9yIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfUlhFUlJDICAgMHgwNDAwQwkvKiBSZWNlaXZlIEVycm9yIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfTVBDICAgICAgMHgwNDAxMAkvKiBNaXNzZWQgUGFja2V0IENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfU0NDICAgICAgMHgwNDAxNAkvKiBTaW5nbGUgQ29sbGlzaW9uIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfRUNPTCAgICAgMHgwNDAxOAkvKiBFeGNlc3NpdmUgQ29sbGlzaW9uIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfTUNDICAgICAgMHgwNDAxQwkvKiBNdWx0aXBsZSBDb2xsaXNpb24gQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9MQVRFQ09MICAweDA0MDIwCS8qIExhdGUgQ29sbGlzaW9uIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfQ09MQyAgICAgMHgwNDAyOAkvKiBDb2xsaXNpb24gQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9EQyAgICAgICAweDA0MDMwCS8qIERlZmVyIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfVE5DUlMgICAgMHgwNDAzNAkvKiBUWC1ObyBDUlMgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9TRUMgICAgICAweDA0MDM4CS8qIFNlcXVlbmNlIEVycm9yIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfQ0VYVEVSUiAgMHgwNDAzQwkvKiBDYXJyaWVyIEV4dGVuc2lvbiBFcnJvciBDb3VudCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1JMRUMgICAgIDB4MDQwNDAJLyogUmVjZWl2ZSBMZW5ndGggRXJyb3IgQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9YT05SWEMgICAweDA0MDQ4CS8qIFhPTiBSWCBDb3VudCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1hPTlRYQyAgIDB4MDQwNEMJLyogWE9OIFRYIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfWE9GRlJYQyAgMHgwNDA1MAkvKiBYT0ZGIFJYIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfWE9GRlRYQyAgMHgwNDA1NAkvKiBYT0ZGIFRYIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfRkNSVUMgICAgMHgwNDA1OAkvKiBGbG93IENvbnRyb2wgUlggVW5zdXBwb3J0ZWQgQ291bnQtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1BSQzY0ICAgIDB4MDQwNUMJLyogUGFja2V0cyBSWCAoNjQgYnl0ZXMpIC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfUFJDMTI3ICAgMHgwNDA2MAkvKiBQYWNrZXRzIFJYICg2NS0xMjcgYnl0ZXMpIC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfUFJDMjU1ICAgMHgwNDA2NAkvKiBQYWNrZXRzIFJYICgxMjgtMjU1IGJ5dGVzKSAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1BSQzUxMSAgIDB4MDQwNjgJLyogUGFja2V0cyBSWCAoMjU1LTUxMSBieXRlcykgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9QUkMxMDIzICAweDA0MDZDCS8qIFBhY2tldHMgUlggKDUxMi0xMDIzIGJ5dGVzKSAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1BSQzE1MjIgIDB4MDQwNzAJLyogUGFja2V0cyBSWCAoMTAyNC0xNTIyIGJ5dGVzKSAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX0dQUkMgICAgIDB4MDQwNzQJLyogR29vZCBQYWNrZXRzIFJYIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfQlBSQyAgICAgMHgwNDA3OAkvKiBCcm9hZGNhc3QgUGFja2V0cyBSWCBDb3VudCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX01QUkMgICAgIDB4MDQwN0MJLyogTXVsdGljYXN0IFBhY2tldHMgUlggQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9HUFRDICAgICAweDA0MDgwCS8qIEdvb2QgUGFja2V0cyBUWCBDb3VudCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX0dPUkNMICAgIDB4MDQwODgJLyogR29vZCBPY3RldHMgUlggQ291bnQgTG93IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfR09SQ0ggICAgMHgwNDA4QwkvKiBHb29kIE9jdGV0cyBSWCBDb3VudCBIaWdoIC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfR09UQ0wgICAgMHgwNDA5MAkvKiBHb29kIE9jdGV0cyBUWCBDb3VudCBMb3cgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9HT1RDSCAgICAweDA0MDk0CS8qIEdvb2QgT2N0ZXRzIFRYIENvdW50IEhpZ2ggLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9STkJDICAgICAweDA0MEEwCS8qIFJYIE5vIEJ1ZmZlcnMgQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9SVUMgICAgICAweDA0MEE0CS8qIFJYIFVuZGVyc2l6ZSBDb3VudCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1JGQyAgICAgIDB4MDQwQTgJLyogUlggRnJhZ21lbnQgQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9ST0MgICAgICAweDA0MEFDCS8qIFJYIE92ZXJzaXplIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfUkpDICAgICAgMHgwNDBCMAkvKiBSWCBKYWJiZXIgQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9NR1RQUkMgICAweDA0MEI0CS8qIE1hbmFnZW1lbnQgUGFja2V0cyBSWCBDb3VudCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX01HVFBEQyAgIDB4MDQwQjgJLyogTWFuYWdlbWVudCBQYWNrZXRzIERyb3BwZWQgQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9NR1RQVEMgICAweDA0MEJDCS8qIE1hbmFnZW1lbnQgUGFja2V0cyBUWCBDb3VudCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1RPUkwgICAgIDB4MDQwQzAJLyogVG90YWwgT2N0ZXRzIFJYIExvdyAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1RPUkggICAgIDB4MDQwQzQJLyogVG90YWwgT2N0ZXRzIFJYIEhpZ2ggLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9UT1RMICAgICAweDA0MEM4CS8qIFRvdGFsIE9jdGV0cyBUWCBMb3cgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9UT1RIICAgICAweDA0MENDCS8qIFRvdGFsIE9jdGV0cyBUWCBIaWdoIC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfVFBSICAgICAgMHgwNDBEMAkvKiBUb3RhbCBQYWNrZXRzIFJYIC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfVFBUICAgICAgMHgwNDBENAkvKiBUb3RhbCBQYWNrZXRzIFRYIC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfUFRDNjQgICAgMHgwNDBEOAkvKiBQYWNrZXRzIFRYICg2NCBieXRlcykgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9QVEMxMjcgICAweDA0MERDCS8qIFBhY2tldHMgVFggKDY1LTEyNyBieXRlcykgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9QVEMyNTUgICAweDA0MEUwCS8qIFBhY2tldHMgVFggKDEyOC0yNTUgYnl0ZXMpIC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfUFRDNTExICAgMHgwNDBFNAkvKiBQYWNrZXRzIFRYICgyNTYtNTExIGJ5dGVzKSAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1BUQzEwMjMgIDB4MDQwRTgJLyogUGFja2V0cyBUWCAoNTEyLTEwMjMgYnl0ZXMpIC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfUFRDMTUyMiAgMHgwNDBFQwkvKiBQYWNrZXRzIFRYICgxMDI0LTE1MjIgQnl0ZXMpIC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfTVBUQyAgICAgMHgwNDBGMAkvKiBNdWx0aWNhc3QgUGFja2V0cyBUWCBDb3VudCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX0JQVEMgICAgIDB4MDQwRjQJLyogQnJvYWRjYXN0IFBhY2tldHMgVFggQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9UU0NUQyAgICAweDA0MEY4CS8qIFRDUCBTZWdtZW50YXRpb24gQ29udGV4dCBUWCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1RTQ1RGQyAgIDB4MDQwRkMJLyogVENQIFNlZ21lbnRhdGlvbiBDb250ZXh0IFRYIEZhaWwgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9SWENTVU0gICAweDA1MDAwCS8qIFJYIENoZWNrc3VtIENvbnRyb2wgLSBSVyAqLworI2RlZmluZSBFMTAwMF9NVEEgICAgICAweDA1MjAwCS8qIE11bHRpY2FzdCBUYWJsZSBBcnJheSAtIFJXIEFycmF5ICovCisjZGVmaW5lIEUxMDAwX1JBICAgICAgIDB4MDU0MDAJLyogUmVjZWl2ZSBBZGRyZXNzIC0gUlcgQXJyYXkgKi8KKyNkZWZpbmUgRTEwMDBfVkZUQSAgICAgMHgwNTYwMAkvKiBWTEFOIEZpbHRlciBUYWJsZSBBcnJheSAtIFJXIEFycmF5ICovCisjZGVmaW5lIEUxMDAwX1dVQyAgICAgIDB4MDU4MDAJLyogV2FrZXVwIENvbnRyb2wgLSBSVyAqLworI2RlZmluZSBFMTAwMF9XVUZDICAgICAweDA1ODA4CS8qIFdha2V1cCBGaWx0ZXIgQ29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1dVUyAgICAgIDB4MDU4MTAJLyogV2FrZXVwIFN0YXR1cyAtIFJPICovCisjZGVmaW5lIEUxMDAwX01BTkMgICAgIDB4MDU4MjAJLyogTWFuYWdlbWVudCBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfSVBBViAgICAgMHgwNTgzOAkvKiBJUCBBZGRyZXNzIFZhbGlkIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfSVA0QVQgICAgMHgwNTg0MAkvKiBJUHY0IEFkZHJlc3MgVGFibGUgLSBSVyBBcnJheSAqLworI2RlZmluZSBFMTAwMF9JUDZBVCAgICAweDA1ODgwCS8qIElQdjYgQWRkcmVzcyBUYWJsZSAtIFJXIEFycmF5ICovCisjZGVmaW5lIEUxMDAwX1dVUEwgICAgIDB4MDU5MDAJLyogV2FrZXVwIFBhY2tldCBMZW5ndGggLSBSVyAqLworI2RlZmluZSBFMTAwMF9XVVBNICAgICAweDA1QTAwCS8qIFdha2V1cCBQYWNrZXQgTWVtb3J5IC0gUk8gQSAqLworI2RlZmluZSBFMTAwMF9GRkxUICAgICAweDA1RjAwCS8qIEZsZXhpYmxlIEZpbHRlciBMZW5ndGggVGFibGUgLSBSVyBBcnJheSAqLworI2RlZmluZSBFMTAwMF9GRk1UICAgICAweDA5MDAwCS8qIEZsZXhpYmxlIEZpbHRlciBNYXNrIFRhYmxlIC0gUlcgQXJyYXkgKi8KKyNkZWZpbmUgRTEwMDBfRkZWVCAgICAgMHgwOTgwMAkvKiBGbGV4aWJsZSBGaWx0ZXIgVmFsdWUgVGFibGUgLSBSVyBBcnJheSAqLworCisvKiBSZWdpc3RlciBTZXQgKDgyNTQyKQorICoKKyAqIFNvbWUgb2YgdGhlIDgyNTQyIHJlZ2lzdGVycyBhcmUgbG9jYXRlZCBhdCBkaWZmZXJlbnQgb2Zmc2V0cyB0aGFuIHRoZXkgYXJlCisgKiBpbiBtb3JlIGN1cnJlbnQgdmVyc2lvbnMgb2YgdGhlIDgyNTR4LiBEZXNwaXRlIHRoZSBkaWZmZXJlbmNlIGluIGxvY2F0aW9uLAorICogdGhlIHJlZ2lzdGVycyBmdW5jdGlvbiBpbiB0aGUgc2FtZSBtYW5uZXIuCisgKi8KKyNkZWZpbmUgRTEwMDBfODI1NDJfQ1RSTCAgICAgRTEwMDBfQ1RSTAorI2RlZmluZSBFMTAwMF84MjU0Ml9TVEFUVVMgICBFMTAwMF9TVEFUVVMKKyNkZWZpbmUgRTEwMDBfODI1NDJfRUVDRCAgICAgRTEwMDBfRUVDRAorI2RlZmluZSBFMTAwMF84MjU0Ml9FRVJEICAgICBFMTAwMF9FRVJECisjZGVmaW5lIEUxMDAwXzgyNTQyX0NUUkxfRVhUIEUxMDAwX0NUUkxfRVhUCisjZGVmaW5lIEUxMDAwXzgyNTQyX01ESUMgICAgIEUxMDAwX01ESUMKKyNkZWZpbmUgRTEwMDBfODI1NDJfRkNBTCAgICAgRTEwMDBfRkNBTAorI2RlZmluZSBFMTAwMF84MjU0Ml9GQ0FIICAgICBFMTAwMF9GQ0FICisjZGVmaW5lIEUxMDAwXzgyNTQyX0ZDVCAgICAgIEUxMDAwX0ZDVAorI2RlZmluZSBFMTAwMF84MjU0Ml9WRVQgICAgICBFMTAwMF9WRVQKKyNkZWZpbmUgRTEwMDBfODI1NDJfUkEgICAgICAgMHgwMDA0MAorI2RlZmluZSBFMTAwMF84MjU0Ml9JQ1IgICAgICBFMTAwMF9JQ1IKKyNkZWZpbmUgRTEwMDBfODI1NDJfSVRSICAgICAgRTEwMDBfSVRSCisjZGVmaW5lIEUxMDAwXzgyNTQyX0lDUyAgICAgIEUxMDAwX0lDUworI2RlZmluZSBFMTAwMF84MjU0Ml9JTVMgICAgICBFMTAwMF9JTVMKKyNkZWZpbmUgRTEwMDBfODI1NDJfSU1DICAgICAgRTEwMDBfSU1DCisjZGVmaW5lIEUxMDAwXzgyNTQyX1JDVEwgICAgIEUxMDAwX1JDVEwKKyNkZWZpbmUgRTEwMDBfODI1NDJfUkRUUiAgICAgMHgwMDEwOAorI2RlZmluZSBFMTAwMF84MjU0Ml9SREJBTCAgICAweDAwMTEwCisjZGVmaW5lIEUxMDAwXzgyNTQyX1JEQkFIICAgIDB4MDAxMTQKKyNkZWZpbmUgRTEwMDBfODI1NDJfUkRMRU4gICAgMHgwMDExOAorI2RlZmluZSBFMTAwMF84MjU0Ml9SREggICAgICAweDAwMTIwCisjZGVmaW5lIEUxMDAwXzgyNTQyX1JEVCAgICAgIDB4MDAxMjgKKyNkZWZpbmUgRTEwMDBfODI1NDJfRkNSVEggICAgMHgwMDE2MAorI2RlZmluZSBFMTAwMF84MjU0Ml9GQ1JUTCAgICAweDAwMTY4CisjZGVmaW5lIEUxMDAwXzgyNTQyX0ZDVFRWICAgIEUxMDAwX0ZDVFRWCisjZGVmaW5lIEUxMDAwXzgyNTQyX1RYQ1cgICAgIEUxMDAwX1RYQ1cKKyNkZWZpbmUgRTEwMDBfODI1NDJfUlhDVyAgICAgRTEwMDBfUlhDVworI2RlZmluZSBFMTAwMF84MjU0Ml9NVEEgICAgICAweDAwMjAwCisjZGVmaW5lIEUxMDAwXzgyNTQyX1RDVEwgICAgIEUxMDAwX1RDVEwKKyNkZWZpbmUgRTEwMDBfODI1NDJfVElQRyAgICAgRTEwMDBfVElQRworI2RlZmluZSBFMTAwMF84MjU0Ml9UREJBTCAgICAweDAwNDIwCisjZGVmaW5lIEUxMDAwXzgyNTQyX1REQkFIICAgIDB4MDA0MjQKKyNkZWZpbmUgRTEwMDBfODI1NDJfVERMRU4gICAgMHgwMDQyOAorI2RlZmluZSBFMTAwMF84MjU0Ml9UREggICAgICAweDAwNDMwCisjZGVmaW5lIEUxMDAwXzgyNTQyX1REVCAgICAgIDB4MDA0MzgKKyNkZWZpbmUgRTEwMDBfODI1NDJfVElEViAgICAgMHgwMDQ0MAorI2RlZmluZSBFMTAwMF84MjU0Ml9UQlQgICAgICBFMTAwMF9UQlQKKyNkZWZpbmUgRTEwMDBfODI1NDJfQUlUICAgICAgRTEwMDBfQUlUCisjZGVmaW5lIEUxMDAwXzgyNTQyX1ZGVEEgICAgIDB4MDA2MDAKKyNkZWZpbmUgRTEwMDBfODI1NDJfTEVEQ1RMICAgRTEwMDBfTEVEQ1RMCisjZGVmaW5lIEUxMDAwXzgyNTQyX1BCQSAgICAgIEUxMDAwX1BCQQorI2RlZmluZSBFMTAwMF84MjU0Ml9SWERDVEwgICBFMTAwMF9SWERDVEwKKyNkZWZpbmUgRTEwMDBfODI1NDJfUkFEViAgICAgRTEwMDBfUkFEVgorI2RlZmluZSBFMTAwMF84MjU0Ml9SU1JQRCAgICBFMTAwMF9SU1JQRAorI2RlZmluZSBFMTAwMF84MjU0Ml9UWERNQUMgICBFMTAwMF9UWERNQUMKKyNkZWZpbmUgRTEwMDBfODI1NDJfVFhEQ1RMICAgRTEwMDBfVFhEQ1RMCisjZGVmaW5lIEUxMDAwXzgyNTQyX1RBRFYgICAgIEUxMDAwX1RBRFYKKyNkZWZpbmUgRTEwMDBfODI1NDJfVFNQTVQgICAgRTEwMDBfVFNQTVQKKyNkZWZpbmUgRTEwMDBfODI1NDJfQ1JDRVJSUyAgRTEwMDBfQ1JDRVJSUworI2RlZmluZSBFMTAwMF84MjU0Ml9BTEdORVJSQyBFMTAwMF9BTEdORVJSQworI2RlZmluZSBFMTAwMF84MjU0Ml9TWU1FUlJTICBFMTAwMF9TWU1FUlJTCisjZGVmaW5lIEUxMDAwXzgyNTQyX1JYRVJSQyAgIEUxMDAwX1JYRVJSQworI2RlZmluZSBFMTAwMF84MjU0Ml9NUEMgICAgICBFMTAwMF9NUEMKKyNkZWZpbmUgRTEwMDBfODI1NDJfU0NDICAgICAgRTEwMDBfU0NDCisjZGVmaW5lIEUxMDAwXzgyNTQyX0VDT0wgICAgIEUxMDAwX0VDT0wKKyNkZWZpbmUgRTEwMDBfODI1NDJfTUNDICAgICAgRTEwMDBfTUNDCisjZGVmaW5lIEUxMDAwXzgyNTQyX0xBVEVDT0wgIEUxMDAwX0xBVEVDT0wKKyNkZWZpbmUgRTEwMDBfODI1NDJfQ09MQyAgICAgRTEwMDBfQ09MQworI2RlZmluZSBFMTAwMF84MjU0Ml9EQyAgICAgICBFMTAwMF9EQworI2RlZmluZSBFMTAwMF84MjU0Ml9UTkNSUyAgICBFMTAwMF9UTkNSUworI2RlZmluZSBFMTAwMF84MjU0Ml9TRUMgICAgICBFMTAwMF9TRUMKKyNkZWZpbmUgRTEwMDBfODI1NDJfQ0VYVEVSUiAgRTEwMDBfQ0VYVEVSUgorI2RlZmluZSBFMTAwMF84MjU0Ml9STEVDICAgICBFMTAwMF9STEVDCisjZGVmaW5lIEUxMDAwXzgyNTQyX1hPTlJYQyAgIEUxMDAwX1hPTlJYQworI2RlZmluZSBFMTAwMF84MjU0Ml9YT05UWEMgICBFMTAwMF9YT05UWEMKKyNkZWZpbmUgRTEwMDBfODI1NDJfWE9GRlJYQyAgRTEwMDBfWE9GRlJYQworI2RlZmluZSBFMTAwMF84MjU0Ml9YT0ZGVFhDICBFMTAwMF9YT0ZGVFhDCisjZGVmaW5lIEUxMDAwXzgyNTQyX0ZDUlVDICAgIEUxMDAwX0ZDUlVDCisjZGVmaW5lIEUxMDAwXzgyNTQyX1BSQzY0ICAgIEUxMDAwX1BSQzY0CisjZGVmaW5lIEUxMDAwXzgyNTQyX1BSQzEyNyAgIEUxMDAwX1BSQzEyNworI2RlZmluZSBFMTAwMF84MjU0Ml9QUkMyNTUgICBFMTAwMF9QUkMyNTUKKyNkZWZpbmUgRTEwMDBfODI1NDJfUFJDNTExICAgRTEwMDBfUFJDNTExCisjZGVmaW5lIEUxMDAwXzgyNTQyX1BSQzEwMjMgIEUxMDAwX1BSQzEwMjMKKyNkZWZpbmUgRTEwMDBfODI1NDJfUFJDMTUyMiAgRTEwMDBfUFJDMTUyMgorI2RlZmluZSBFMTAwMF84MjU0Ml9HUFJDICAgICBFMTAwMF9HUFJDCisjZGVmaW5lIEUxMDAwXzgyNTQyX0JQUkMgICAgIEUxMDAwX0JQUkMKKyNkZWZpbmUgRTEwMDBfODI1NDJfTVBSQyAgICAgRTEwMDBfTVBSQworI2RlZmluZSBFMTAwMF84MjU0Ml9HUFRDICAgICBFMTAwMF9HUFRDCisjZGVmaW5lIEUxMDAwXzgyNTQyX0dPUkNMICAgIEUxMDAwX0dPUkNMCisjZGVmaW5lIEUxMDAwXzgyNTQyX0dPUkNIICAgIEUxMDAwX0dPUkNICisjZGVmaW5lIEUxMDAwXzgyNTQyX0dPVENMICAgIEUxMDAwX0dPVENMCisjZGVmaW5lIEUxMDAwXzgyNTQyX0dPVENIICAgIEUxMDAwX0dPVENICisjZGVmaW5lIEUxMDAwXzgyNTQyX1JOQkMgICAgIEUxMDAwX1JOQkMKKyNkZWZpbmUgRTEwMDBfODI1NDJfUlVDICAgICAgRTEwMDBfUlVDCisjZGVmaW5lIEUxMDAwXzgyNTQyX1JGQyAgICAgIEUxMDAwX1JGQworI2RlZmluZSBFMTAwMF84MjU0Ml9ST0MgICAgICBFMTAwMF9ST0MKKyNkZWZpbmUgRTEwMDBfODI1NDJfUkpDICAgICAgRTEwMDBfUkpDCisjZGVmaW5lIEUxMDAwXzgyNTQyX01HVFBSQyAgIEUxMDAwX01HVFBSQworI2RlZmluZSBFMTAwMF84MjU0Ml9NR1RQREMgICBFMTAwMF9NR1RQREMKKyNkZWZpbmUgRTEwMDBfODI1NDJfTUdUUFRDICAgRTEwMDBfTUdUUFRDCisjZGVmaW5lIEUxMDAwXzgyNTQyX1RPUkwgICAgIEUxMDAwX1RPUkwKKyNkZWZpbmUgRTEwMDBfODI1NDJfVE9SSCAgICAgRTEwMDBfVE9SSAorI2RlZmluZSBFMTAwMF84MjU0Ml9UT1RMICAgICBFMTAwMF9UT1RMCisjZGVmaW5lIEUxMDAwXzgyNTQyX1RPVEggICAgIEUxMDAwX1RPVEgKKyNkZWZpbmUgRTEwMDBfODI1NDJfVFBSICAgICAgRTEwMDBfVFBSCisjZGVmaW5lIEUxMDAwXzgyNTQyX1RQVCAgICAgIEUxMDAwX1RQVAorI2RlZmluZSBFMTAwMF84MjU0Ml9QVEM2NCAgICBFMTAwMF9QVEM2NAorI2RlZmluZSBFMTAwMF84MjU0Ml9QVEMxMjcgICBFMTAwMF9QVEMxMjcKKyNkZWZpbmUgRTEwMDBfODI1NDJfUFRDMjU1ICAgRTEwMDBfUFRDMjU1CisjZGVmaW5lIEUxMDAwXzgyNTQyX1BUQzUxMSAgIEUxMDAwX1BUQzUxMQorI2RlZmluZSBFMTAwMF84MjU0Ml9QVEMxMDIzICBFMTAwMF9QVEMxMDIzCisjZGVmaW5lIEUxMDAwXzgyNTQyX1BUQzE1MjIgIEUxMDAwX1BUQzE1MjIKKyNkZWZpbmUgRTEwMDBfODI1NDJfTVBUQyAgICAgRTEwMDBfTVBUQworI2RlZmluZSBFMTAwMF84MjU0Ml9CUFRDICAgICBFMTAwMF9CUFRDCisjZGVmaW5lIEUxMDAwXzgyNTQyX1RTQ1RDICAgIEUxMDAwX1RTQ1RDCisjZGVmaW5lIEUxMDAwXzgyNTQyX1RTQ1RGQyAgIEUxMDAwX1RTQ1RGQworI2RlZmluZSBFMTAwMF84MjU0Ml9SWENTVU0gICBFMTAwMF9SWENTVU0KKyNkZWZpbmUgRTEwMDBfODI1NDJfV1VDICAgICAgRTEwMDBfV1VDCisjZGVmaW5lIEUxMDAwXzgyNTQyX1dVRkMgICAgIEUxMDAwX1dVRkMKKyNkZWZpbmUgRTEwMDBfODI1NDJfV1VTICAgICAgRTEwMDBfV1VTCisjZGVmaW5lIEUxMDAwXzgyNTQyX01BTkMgICAgIEUxMDAwX01BTkMKKyNkZWZpbmUgRTEwMDBfODI1NDJfSVBBViAgICAgRTEwMDBfSVBBVgorI2RlZmluZSBFMTAwMF84MjU0Ml9JUDRBVCAgICBFMTAwMF9JUDRBVAorI2RlZmluZSBFMTAwMF84MjU0Ml9JUDZBVCAgICBFMTAwMF9JUDZBVAorI2RlZmluZSBFMTAwMF84MjU0Ml9XVVBMICAgICBFMTAwMF9XVVBMCisjZGVmaW5lIEUxMDAwXzgyNTQyX1dVUE0gICAgIEUxMDAwX1dVUE0KKyNkZWZpbmUgRTEwMDBfODI1NDJfRkZMVCAgICAgRTEwMDBfRkZMVAorI2RlZmluZSBFMTAwMF84MjU0Ml9GRk1UICAgICBFMTAwMF9GRk1UCisjZGVmaW5lIEUxMDAwXzgyNTQyX0ZGVlQgICAgIEUxMDAwX0ZGVlQKKworLyogU3RhdGlzdGljcyBjb3VudGVycyBjb2xsZWN0ZWQgYnkgdGhlIE1BQyAqLworc3RydWN0IGUxMDAwX2h3X3N0YXRzIHsKKwl1aW50NjRfdCBjcmNlcnJzOworCXVpbnQ2NF90IGFsZ25lcnJjOworCXVpbnQ2NF90IHN5bWVycnM7CisJdWludDY0X3QgcnhlcnJjOworCXVpbnQ2NF90IG1wYzsKKwl1aW50NjRfdCBzY2M7CisJdWludDY0X3QgZWNvbDsKKwl1aW50NjRfdCBtY2M7CisJdWludDY0X3QgbGF0ZWNvbDsKKwl1aW50NjRfdCBjb2xjOworCXVpbnQ2NF90IGRjOworCXVpbnQ2NF90IHRuY3JzOworCXVpbnQ2NF90IHNlYzsKKwl1aW50NjRfdCBjZXh0ZXJyOworCXVpbnQ2NF90IHJsZWM7CisJdWludDY0X3QgeG9ucnhjOworCXVpbnQ2NF90IHhvbnR4YzsKKwl1aW50NjRfdCB4b2ZmcnhjOworCXVpbnQ2NF90IHhvZmZ0eGM7CisJdWludDY0X3QgZmNydWM7CisJdWludDY0X3QgcHJjNjQ7CisJdWludDY0X3QgcHJjMTI3OworCXVpbnQ2NF90IHByYzI1NTsKKwl1aW50NjRfdCBwcmM1MTE7CisJdWludDY0X3QgcHJjMTAyMzsKKwl1aW50NjRfdCBwcmMxNTIyOworCXVpbnQ2NF90IGdwcmM7CisJdWludDY0X3QgYnByYzsKKwl1aW50NjRfdCBtcHJjOworCXVpbnQ2NF90IGdwdGM7CisJdWludDY0X3QgZ29yY2w7CisJdWludDY0X3QgZ29yY2g7CisJdWludDY0X3QgZ290Y2w7CisJdWludDY0X3QgZ290Y2g7CisJdWludDY0X3Qgcm5iYzsKKwl1aW50NjRfdCBydWM7CisJdWludDY0X3QgcmZjOworCXVpbnQ2NF90IHJvYzsKKwl1aW50NjRfdCByamM7CisJdWludDY0X3QgbWdwcmM7CisJdWludDY0X3QgbWdwZGM7CisJdWludDY0X3QgbWdwdGM7CisJdWludDY0X3QgdG9ybDsKKwl1aW50NjRfdCB0b3JoOworCXVpbnQ2NF90IHRvdGw7CisJdWludDY0X3QgdG90aDsKKwl1aW50NjRfdCB0cHI7CisJdWludDY0X3QgdHB0OworCXVpbnQ2NF90IHB0YzY0OworCXVpbnQ2NF90IHB0YzEyNzsKKwl1aW50NjRfdCBwdGMyNTU7CisJdWludDY0X3QgcHRjNTExOworCXVpbnQ2NF90IHB0YzEwMjM7CisJdWludDY0X3QgcHRjMTUyMjsKKwl1aW50NjRfdCBtcHRjOworCXVpbnQ2NF90IGJwdGM7CisJdWludDY0X3QgdHNjdGM7CisJdWludDY0X3QgdHNjdGZjOworfTsKKworLyogU3RydWN0dXJlIGNvbnRhaW5pbmcgdmFyaWFibGVzIHVzZWQgYnkgdGhlIHNoYXJlZCBjb2RlIChlMTAwMF9ody5jKSAqLworc3RydWN0IGUxMDAwX2h3IHsKKwlwY2lfZGV2X3QgcGRldjsKKwl1aW50OF90ICpod19hZGRyOworCWUxMDAwX21hY190eXBlIG1hY190eXBlOworCWUxMDAwX21lZGlhX3R5cGUgbWVkaWFfdHlwZTsKKwllMTAwMF9sYW5fbG9jIGxhbl9sb2M7CisJZTEwMDBfZmNfdHlwZSBmYzsKKyNpZiAwCisJZTEwMDBfYnVzX3NwZWVkIGJ1c19zcGVlZDsKKwllMTAwMF9idXNfd2lkdGggYnVzX3dpZHRoOworCWUxMDAwX2J1c190eXBlIGJ1c190eXBlOworCXVpbnQzMl90IGlvX2Jhc2U7CisjZW5kaWYKKwl1aW50MzJfdCBwaHlfaWQ7CisJdWludDMyX3QgcGh5X2FkZHI7CisJdWludDMyX3Qgb3JpZ2luYWxfZmM7CisJdWludDMyX3QgdHhjdzsKKwl1aW50MzJfdCBhdXRvbmVnX2ZhaWxlZDsKKyNpZiAwCisJdWludDMyX3QgbWF4X2ZyYW1lX3NpemU7CisJdWludDMyX3QgbWluX2ZyYW1lX3NpemU7CisJdWludDMyX3QgbWNfZmlsdGVyX3R5cGU7CisJdWludDMyX3QgbnVtX21jX2FkZHJzOworCXVpbnQzMl90IGNvbGxpc2lvbl9kZWx0YTsKKwl1aW50MzJfdCB0eF9wYWNrZXRfZGVsdGE7CisJdWludDMyX3QgbGVkY3RsX2RlZmF1bHQ7CisJdWludDMyX3QgbGVkY3RsX21vZGUxOworCXVpbnQzMl90IGxlZGN0bF9tb2RlMjsKKyNlbmRpZgorCXVpbnQxNl90IGF1dG9uZWdfYWR2ZXJ0aXNlZDsKKwl1aW50MTZfdCBwY2lfY21kX3dvcmQ7CisJdWludDE2X3QgZmNfaGlnaF93YXRlcjsKKwl1aW50MTZfdCBmY19sb3dfd2F0ZXI7CisJdWludDE2X3QgZmNfcGF1c2VfdGltZTsKKyNpZiAwCisJdWludDE2X3QgY3VycmVudF9pZnNfdmFsOworCXVpbnQxNl90IGlmc19taW5fdmFsOworCXVpbnQxNl90IGlmc19tYXhfdmFsOworCXVpbnQxNl90IGlmc19zdGVwX3NpemU7CisJdWludDE2X3QgaWZzX3JhdGlvOworI2VuZGlmCisJdWludDE2X3QgZGV2aWNlX2lkOworCXVpbnQxNl90IHZlbmRvcl9pZDsKKwl1aW50MTZfdCBzdWJzeXN0ZW1faWQ7CisJdWludDE2X3Qgc3Vic3lzdGVtX3ZlbmRvcl9pZDsKKwl1aW50OF90IHJldmlzaW9uX2lkOworI2lmIDAKKwl1aW50OF90IGF1dG9uZWc7CisJdWludDhfdCBtZGl4OworCXVpbnQ4X3QgZm9yY2VkX3NwZWVkX2R1cGxleDsKKwl1aW50OF90IHdhaXRfYXV0b25lZ19jb21wbGV0ZTsKKwl1aW50OF90IGRtYV9mYWlybmVzczsKKyNlbmRpZgorI2lmIDAKKwl1aW50OF90IHBlcm1fbWFjX2FkZHJbTk9ERV9BRERSRVNTX1NJWkVdOworCWJvb2xlYW5fdCBkaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb247CisjZW5kaWYKKwlib29sZWFuX3QgZ2V0X2xpbmtfc3RhdHVzOworCWJvb2xlYW5fdCB0YmlfY29tcGF0aWJpbGl0eV9lbjsKKwlib29sZWFuX3QgdGJpX2NvbXBhdGliaWxpdHlfb247CisJYm9vbGVhbl90IGZjX3NlbmRfeG9uOworCWJvb2xlYW5fdCByZXBvcnRfdHhfZWFybHk7CisjaWYgMAorCWJvb2xlYW5fdCBhZGFwdGl2ZV9pZnM7CisJYm9vbGVhbl90IGlmc19wYXJhbXNfZm9yY2VkOworCWJvb2xlYW5fdCBpbl9pZnNfbW9kZTsKKyNlbmRpZgorfTsKKworI2RlZmluZSBFMTAwMF9FRVBST01fU1dEUElOMCAgIDB4MDAwMQkvKiBTV0RQSU4gMCBFRVBST00gVmFsdWUgKi8KKyNkZWZpbmUgRTEwMDBfRUVQUk9NX0xFRF9MT0dJQyAweDAwMjAJLyogTGVkIExvZ2ljIFdvcmQgKi8KKworLyogUmVnaXN0ZXIgQml0IE1hc2tzICovCisvKiBEZXZpY2UgQ29udHJvbCAqLworI2RlZmluZSBFMTAwMF9DVFJMX0ZEICAgICAgIDB4MDAwMDAwMDEJLyogRnVsbCBkdXBsZXguMD1oYWxmOyAxPWZ1bGwgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9CRU0gICAgICAweDAwMDAwMDAyCS8qIEVuZGlhbiBNb2RlLjA9bGl0dGxlLDE9YmlnICovCisjZGVmaW5lIEUxMDAwX0NUUkxfUFJJT1IgICAgMHgwMDAwMDAwNAkvKiBQcmlvcml0eSBvbiBQQ0kuIDA9cngsMT1mYWlyICovCisjZGVmaW5lIEUxMDAwX0NUUkxfTFJTVCAgICAgMHgwMDAwMDAwOAkvKiBMaW5rIHJlc2V0LiAwPW5vcm1hbCwxPXJlc2V0ICovCisjZGVmaW5lIEUxMDAwX0NUUkxfVE1FICAgICAgMHgwMDAwMDAxMAkvKiBUZXN0IG1vZGUuIDA9bm9ybWFsLDE9dGVzdCAqLworI2RlZmluZSBFMTAwMF9DVFJMX1NMRSAgICAgIDB4MDAwMDAwMjAJLyogU2VyaWFsIExpbmsgb24gMD1kaXMsMT1lbiAqLworI2RlZmluZSBFMTAwMF9DVFJMX0FTREUgICAgIDB4MDAwMDAwMjAJLyogQXV0by1zcGVlZCBkZXRlY3QgZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX0NUUkxfU0xVICAgICAgMHgwMDAwMDA0MAkvKiBTZXQgbGluayB1cCAoRm9yY2UgTGluaykgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9JTE9TICAgICAweDAwMDAwMDgwCS8qIEludmVydCBMb3NzLU9mIFNpZ25hbCAqLworI2RlZmluZSBFMTAwMF9DVFJMX1NQRF9TRUwgIDB4MDAwMDAzMDAJLyogU3BlZWQgU2VsZWN0IE1hc2sgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9TUERfMTAgICAweDAwMDAwMDAwCS8qIEZvcmNlIDEwTWIgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9TUERfMTAwICAweDAwMDAwMTAwCS8qIEZvcmNlIDEwME1iICovCisjZGVmaW5lIEUxMDAwX0NUUkxfU1BEXzEwMDAgMHgwMDAwMDIwMAkvKiBGb3JjZSAxR2IgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9CRU0zMiAgICAweDAwMDAwNDAwCS8qIEJpZyBFbmRpYW4gMzIgbW9kZSAqLworI2RlZmluZSBFMTAwMF9DVFJMX0ZSQ1NQRCAgIDB4MDAwMDA4MDAJLyogRm9yY2UgU3BlZWQgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9GUkNEUFggICAweDAwMDAxMDAwCS8qIEZvcmNlIER1cGxleCAqLworI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTjAgIDB4MDAwNDAwMDAJLyogU1dEUElOIDAgdmFsdWUgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU4xICAweDAwMDgwMDAwCS8qIFNXRFBJTiAxIHZhbHVlICovCisjZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElOMiAgMHgwMDEwMDAwMAkvKiBTV0RQSU4gMiB2YWx1ZSAqLworI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTjMgIDB4MDAyMDAwMDAJLyogU1dEUElOIDMgdmFsdWUgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU8wICAweDAwNDAwMDAwCS8qIFNXRFBJTiAwIElucHV0IG9yIG91dHB1dCAqLworI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTzEgIDB4MDA4MDAwMDAJLyogU1dEUElOIDEgaW5wdXQgb3Igb3V0cHV0ICovCisjZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElPMiAgMHgwMTAwMDAwMAkvKiBTV0RQSU4gMiBpbnB1dCBvciBvdXRwdXQgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU8zICAweDAyMDAwMDAwCS8qIFNXRFBJTiAzIGlucHV0IG9yIG91dHB1dCAqLworI2RlZmluZSBFMTAwMF9DVFJMX1JTVCAgICAgIDB4MDQwMDAwMDAJLyogR2xvYmFsIHJlc2V0ICovCisjZGVmaW5lIEUxMDAwX0NUUkxfUkZDRSAgICAgMHgwODAwMDAwMAkvKiBSZWNlaXZlIEZsb3cgQ29udHJvbCBlbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9URkNFICAgICAweDEwMDAwMDAwCS8qIFRyYW5zbWl0IGZsb3cgY29udHJvbCBlbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9SVEUgICAgICAweDIwMDAwMDAwCS8qIFJvdXRpbmcgdGFnIGVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9DVFJMX1ZNRSAgICAgIDB4NDAwMDAwMDAJLyogSUVFRSBWTEFOIG1vZGUgZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX0NUUkxfUEhZX1JTVCAgMHg4MDAwMDAwMAkvKiBQSFkgUmVzZXQgKi8KKworLyogRGV2aWNlIFN0YXR1cyAqLworI2RlZmluZSBFMTAwMF9TVEFUVVNfRkQgICAgICAgICAweDAwMDAwMDAxCS8qIEZ1bGwgZHVwbGV4LjA9aGFsZiwxPWZ1bGwgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX0xVICAgICAgICAgMHgwMDAwMDAwMgkvKiBMaW5rIHVwLjA9bm8sMT1saW5rICovCisjZGVmaW5lIEUxMDAwX1NUQVRVU19GVU5DX01BU0sgIDB4MDAwMDAwMEMJLyogUENJIEZ1bmN0aW9uIE1hc2sgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX0ZVTkNfMCAgICAgMHgwMDAwMDAwMAkvKiBGdW5jdGlvbiAwICovCisjZGVmaW5lIEUxMDAwX1NUQVRVU19GVU5DXzEgICAgIDB4MDAwMDAwMDQJLyogRnVuY3Rpb24gMSAqLworI2RlZmluZSBFMTAwMF9TVEFUVVNfVFhPRkYgICAgICAweDAwMDAwMDEwCS8qIHRyYW5zbWlzc2lvbiBwYXVzZWQgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX1RCSU1PREUgICAgMHgwMDAwMDAyMAkvKiBUQkkgbW9kZSAqLworI2RlZmluZSBFMTAwMF9TVEFUVVNfU1BFRURfTUFTSyAweDAwMDAwMEMwCisjZGVmaW5lIEUxMDAwX1NUQVRVU19TUEVFRF8xMCAgIDB4MDAwMDAwMDAJLyogU3BlZWQgMTBNYi9zICovCisjZGVmaW5lIEUxMDAwX1NUQVRVU19TUEVFRF8xMDAgIDB4MDAwMDAwNDAJLyogU3BlZWQgMTAwTWIvcyAqLworI2RlZmluZSBFMTAwMF9TVEFUVVNfU1BFRURfMTAwMCAweDAwMDAwMDgwCS8qIFNwZWVkIDEwMDBNYi9zICovCisjZGVmaW5lIEUxMDAwX1NUQVRVU19BU0RWICAgICAgIDB4MDAwMDAzMDAJLyogQXV0byBzcGVlZCBkZXRlY3QgdmFsdWUgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX01UWENLT0sgICAgMHgwMDAwMDQwMAkvKiBNVFggY2xvY2sgcnVubmluZyBPSyAqLworI2RlZmluZSBFMTAwMF9TVEFUVVNfUENJNjYgICAgICAweDAwMDAwODAwCS8qIEluIDY2TWh6IHNsb3QgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX0JVUzY0ICAgICAgMHgwMDAwMTAwMAkvKiBJbiA2NCBiaXQgc2xvdCAqLworI2RlZmluZSBFMTAwMF9TVEFUVVNfUENJWF9NT0RFICAweDAwMDAyMDAwCS8qIFBDSS1YIG1vZGUgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX1BDSVhfU1BFRUQgMHgwMDAwQzAwMAkvKiBQQ0ktWCBidXMgc3BlZWQgKi8KKworLyogQ29uc3RhbnRzIHVzZWQgdG8gaW50cmVwcmV0IHRoZSBtYXNrZWQgUENJLVggYnVzIHNwZWVkLiAqLworI2RlZmluZSBFMTAwMF9TVEFUVVNfUENJWF9TUEVFRF82NiAgMHgwMDAwMDAwMAkvKiBQQ0ktWCBidXMgc3BlZWQgIDUwLTY2IE1IeiAqLworI2RlZmluZSBFMTAwMF9TVEFUVVNfUENJWF9TUEVFRF8xMDAgMHgwMDAwNDAwMAkvKiBQQ0ktWCBidXMgc3BlZWQgIDY2LTEwMCBNSHogKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX1BDSVhfU1BFRURfMTMzIDB4MDAwMDgwMDAJLyogUENJLVggYnVzIHNwZWVkIDEwMC0xMzMgTUh6ICovCisKKy8qIEVFUFJPTS9GbGFzaCBDb250cm9sICovCisjZGVmaW5lIEUxMDAwX0VFQ0RfU0sgICAgICAgIDB4MDAwMDAwMDEJLyogRUVQUk9NIENsb2NrICovCisjZGVmaW5lIEUxMDAwX0VFQ0RfQ1MgICAgICAgIDB4MDAwMDAwMDIJLyogRUVQUk9NIENoaXAgU2VsZWN0ICovCisjZGVmaW5lIEUxMDAwX0VFQ0RfREkgICAgICAgIDB4MDAwMDAwMDQJLyogRUVQUk9NIERhdGEgSW4gKi8KKyNkZWZpbmUgRTEwMDBfRUVDRF9ETyAgICAgICAgMHgwMDAwMDAwOAkvKiBFRVBST00gRGF0YSBPdXQgKi8KKyNkZWZpbmUgRTEwMDBfRUVDRF9GV0VfTUFTSyAgMHgwMDAwMDAzMAorI2RlZmluZSBFMTAwMF9FRUNEX0ZXRV9ESVMgICAweDAwMDAwMDEwCS8qIERpc2FibGUgRkxBU0ggd3JpdGVzICovCisjZGVmaW5lIEUxMDAwX0VFQ0RfRldFX0VOICAgIDB4MDAwMDAwMjAJLyogRW5hYmxlIEZMQVNIIHdyaXRlcyAqLworI2RlZmluZSBFMTAwMF9FRUNEX0ZXRV9TSElGVCA0CisjZGVmaW5lIEUxMDAwX0VFQ0RfU0laRSAgICAgIDB4MDAwMDAyMDAJLyogRUVQUk9NIFNpemUgKDA9NjQgd29yZCAxPTI1NiB3b3JkKSAqLworI2RlZmluZSBFMTAwMF9FRUNEX1JFUSAgICAgICAweDAwMDAwMDQwCS8qIEVFUFJPTSBBY2Nlc3MgUmVxdWVzdCAqLworI2RlZmluZSBFMTAwMF9FRUNEX0dOVCAgICAgICAweDAwMDAwMDgwCS8qIEVFUFJPTSBBY2Nlc3MgR3JhbnQgKi8KKyNkZWZpbmUgRTEwMDBfRUVDRF9QUkVTICAgICAgMHgwMDAwMDEwMAkvKiBFRVBST00gUHJlc2VudCAqLworCisvKiBFRVBST00gUmVhZCAqLworI2RlZmluZSBFMTAwMF9FRVJEX1NUQVJUICAgICAgMHgwMDAwMDAwMQkvKiBTdGFydCBSZWFkICovCisjZGVmaW5lIEUxMDAwX0VFUkRfRE9ORSAgICAgICAweDAwMDAwMDEwCS8qIFJlYWQgRG9uZSAqLworI2RlZmluZSBFMTAwMF9FRVJEX0FERFJfU0hJRlQgOAorI2RlZmluZSBFMTAwMF9FRVJEX0FERFJfTUFTSyAgMHgwMDAwRkYwMAkvKiBSZWFkIEFkZHJlc3MgKi8KKyNkZWZpbmUgRTEwMDBfRUVSRF9EQVRBX1NISUZUIDE2CisjZGVmaW5lIEUxMDAwX0VFUkRfREFUQV9NQVNLICAweEZGRkYwMDAwCS8qIFJlYWQgRGF0YSAqLworCisvKiBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9HUEkwX0VOICAgMHgwMDAwMDAwMQkvKiBNYXBzIFNEUDQgdG8gR1BJMCAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9HUEkxX0VOICAgMHgwMDAwMDAwMgkvKiBNYXBzIFNEUDUgdG8gR1BJMSAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9QSFlJTlRfRU4gRTEwMDBfQ1RSTF9FWFRfR1BJMV9FTgorI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9HUEkyX0VOICAgMHgwMDAwMDAwNAkvKiBNYXBzIFNEUDYgdG8gR1BJMiAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9HUEkzX0VOICAgMHgwMDAwMDAwOAkvKiBNYXBzIFNEUDcgdG8gR1BJMyAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA0X0RBVEEgMHgwMDAwMDAxMAkvKiBWYWx1ZSBvZiBTVyBEZWZpbmVhYmxlIFBpbiA0ICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDVfREFUQSAweDAwMDAwMDIwCS8qIFZhbHVlIG9mIFNXIERlZmluZWFibGUgUGluIDUgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfUEhZX0lOVCAgIEUxMDAwX0NUUkxfRVhUX1NEUDVfREFUQQorI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA2X0RBVEEgMHgwMDAwMDA0MAkvKiBWYWx1ZSBvZiBTVyBEZWZpbmVhYmxlIFBpbiA2ICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NXRFBJTjYgCSAweDAwMDAwMDQwCS8qIFNXRFBJTiA2IHZhbHVlICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDdfREFUQSAweDAwMDAwMDgwCS8qIFZhbHVlIG9mIFNXIERlZmluZWFibGUgUGluIDcgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfU1dEUElONyAJIDB4MDAwMDAwODAJLyogU1dEUElOIDcgdmFsdWUgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfU0RQNF9ESVIgIDB4MDAwMDAxMDAJLyogRGlyZWN0aW9uIG9mIFNEUDQgMD1pbiAxPW91dCAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA1X0RJUiAgMHgwMDAwMDIwMAkvKiBEaXJlY3Rpb24gb2YgU0RQNSAwPWluIDE9b3V0ICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDZfRElSICAweDAwMDAwNDAwCS8qIERpcmVjdGlvbiBvZiBTRFA2IDA9aW4gMT1vdXQgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfU1dEUElPNiAgIDB4MDAwMDA0MDAJLyogU1dEUElOIDYgSW5wdXQgb3Igb3V0cHV0ICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDdfRElSICAweDAwMDAwODAwCS8qIERpcmVjdGlvbiBvZiBTRFA3IDA9aW4gMT1vdXQgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfU1dEUElPNyAgIDB4MDAwMDA4MDAJLyogU1dEUElOIDcgSW5wdXQgb3Igb3V0cHV0ICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0FTRENISyAgICAweDAwMDAxMDAwCS8qIEluaXRpYXRlIGFuIEFTRCBzZXF1ZW5jZSAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9FRV9SU1QgICAgMHgwMDAwMjAwMAkvKiBSZWluaXRpYWxpemUgZnJvbSBFRVBST00gKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfSVBTICAgICAgIDB4MDAwMDQwMDAJLyogSW52ZXJ0IFBvd2VyIFN0YXRlICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NQRF9CWVBTICAweDAwMDA4MDAwCS8qIFNwZWVkIFNlbGVjdCBCeXBhc3MgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0sgMHgwMEMwMDAwMAorI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfR01JSSAweDAwMDAwMDAwCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9UQkkgIDB4MDBDMDAwMDAKKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfV1JfV01BUktfTUFTSyAgMHgwMzAwMDAwMAorI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9XUl9XTUFSS18yNTYgICAweDAwMDAwMDAwCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1dSX1dNQVJLXzMyMCAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfV1JfV01BUktfMzg0ICAgMHgwMjAwMDAwMAorI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9XUl9XTUFSS180NDggICAweDAzMDAwMDAwCisKKy8qIE1ESSBDb250cm9sICovCisjZGVmaW5lIEUxMDAwX01ESUNfREFUQV9NQVNLIDB4MDAwMEZGRkYKKyNkZWZpbmUgRTEwMDBfTURJQ19SRUdfTUFTSyAgMHgwMDFGMDAwMAorI2RlZmluZSBFMTAwMF9NRElDX1JFR19TSElGVCAxNgorI2RlZmluZSBFMTAwMF9NRElDX1BIWV9NQVNLICAweDAzRTAwMDAwCisjZGVmaW5lIEUxMDAwX01ESUNfUEhZX1NISUZUIDIxCisjZGVmaW5lIEUxMDAwX01ESUNfT1BfV1JJVEUgIDB4MDQwMDAwMDAKKyNkZWZpbmUgRTEwMDBfTURJQ19PUF9SRUFEICAgMHgwODAwMDAwMAorI2RlZmluZSBFMTAwMF9NRElDX1JFQURZICAgICAweDEwMDAwMDAwCisjZGVmaW5lIEUxMDAwX01ESUNfSU5UX0VOICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgRTEwMDBfTURJQ19FUlJPUiAgICAgMHg0MDAwMDAwMAorCisvKiBMRUQgQ29udHJvbCAqLworI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9NT0RFX01BU0sgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRTEwMDBfTEVEQ1RMX0xFRDBfTU9ERV9TSElGVCAwCisjZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQwX0lWUlQgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9CTElOSyAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgRTEwMDBfTEVEQ1RMX0xFRDFfTU9ERV9NQVNLICAweDAwMDAwRjAwCisjZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQxX01PREVfU0hJRlQgOAorI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMV9JVlJUICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgRTEwMDBfTEVEQ1RMX0xFRDFfQkxJTksgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQyX01PREVfTUFTSyAgMHgwMDBGMDAwMAorI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMl9NT0RFX1NISUZUIDE2CisjZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQyX0lWUlQgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMl9CTElOSyAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRTEwMDBfTEVEQ1RMX0xFRDNfTU9ERV9NQVNLICAweDBGMDAwMDAwCisjZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQzX01PREVfU0hJRlQgMjQKKyNkZWZpbmUgRTEwMDBfTEVEQ1RMX0xFRDNfSVZSVCAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEUxMDAwX0xFRENUTF9MRUQzX0JMSU5LICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0xJTktfMTBfMTAwMCAgMHgwCisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0xJTktfMTAwXzEwMDAgMHgxCisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0xJTktfVVAgICAgICAgMHgyCisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0FDVElWSVRZICAgICAgMHgzCisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0xJTktfQUNUSVZJVFkgMHg0CisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0xJTktfMTAgICAgICAgMHg1CisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0xJTktfMTAwICAgICAgMHg2CisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0xJTktfMTAwMCAgICAgMHg3CisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX1BDSVhfTU9ERSAgICAgMHg4CisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0ZVTExfRFVQTEVYICAgMHg5CisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0NPTExJU0lPTiAgICAgMHhBCisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0JVU19TUEVFRCAgICAgMHhCCisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0JVU19TSVpFICAgICAgMHhDCisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX1BBVVNFRCAgICAgICAgMHhECisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PTiAgICAgICAgMHhFCisjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PRkYgICAgICAgMHhGCisKKy8qIFJlY2VpdmUgQWRkcmVzcyAqLworI2RlZmluZSBFMTAwMF9SQUhfQVYgIDB4ODAwMDAwMDAJLyogUmVjZWl2ZSBkZXNjcmlwdG9yIHZhbGlkICovCisKKy8qIEludGVycnVwdCBDYXVzZSBSZWFkICovCisjZGVmaW5lIEUxMDAwX0lDUl9UWERXICAgIDB4MDAwMDAwMDEJLyogVHJhbnNtaXQgZGVzYyB3cml0dGVuIGJhY2sgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1RYUUUgICAgMHgwMDAwMDAwMgkvKiBUcmFuc21pdCBRdWV1ZSBlbXB0eSAqLworI2RlZmluZSBFMTAwMF9JQ1JfTFNDICAgICAweDAwMDAwMDA0CS8qIExpbmsgU3RhdHVzIENoYW5nZSAqLworI2RlZmluZSBFMTAwMF9JQ1JfUlhTRVEgICAweDAwMDAwMDA4CS8qIHJ4IHNlcXVlbmNlIGVycm9yICovCisjZGVmaW5lIEUxMDAwX0lDUl9SWERNVDAgIDB4MDAwMDAwMTAJLyogcnggZGVzYyBtaW4uIHRocmVzaG9sZCAoMCkgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1JYTyAgICAgMHgwMDAwMDA0MAkvKiByeCBvdmVycnVuICovCisjZGVmaW5lIEUxMDAwX0lDUl9SWFQwICAgIDB4MDAwMDAwODAJLyogcnggdGltZXIgaW50ciAocmluZyAwKSAqLworI2RlZmluZSBFMTAwMF9JQ1JfTURBQyAgICAweDAwMDAwMjAwCS8qIE1ESU8gYWNjZXNzIGNvbXBsZXRlICovCisjZGVmaW5lIEUxMDAwX0lDUl9SWENGRyAgIDB4MDAwMDA0MDAJLyogUlggL2MvIG9yZGVyZWQgc2V0ICovCisjZGVmaW5lIEUxMDAwX0lDUl9HUElfRU4wIDB4MDAwMDA4MDAJLyogR1AgSW50IDAgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX0dQSV9FTjEgMHgwMDAwMTAwMAkvKiBHUCBJbnQgMSAqLworI2RlZmluZSBFMTAwMF9JQ1JfR1BJX0VOMiAweDAwMDAyMDAwCS8qIEdQIEludCAyICovCisjZGVmaW5lIEUxMDAwX0lDUl9HUElfRU4zIDB4MDAwMDQwMDAJLyogR1AgSW50IDMgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1RYRF9MT1cgMHgwMDAwODAwMAorI2RlZmluZSBFMTAwMF9JQ1JfU1JQRCAgICAweDAwMDEwMDAwCisKKy8qIEludGVycnVwdCBDYXVzZSBTZXQgKi8KKyNkZWZpbmUgRTEwMDBfSUNTX1RYRFcgICAgRTEwMDBfSUNSX1RYRFcJLyogVHJhbnNtaXQgZGVzYyB3cml0dGVuIGJhY2sgKi8KKyNkZWZpbmUgRTEwMDBfSUNTX1RYUUUgICAgRTEwMDBfSUNSX1RYUUUJLyogVHJhbnNtaXQgUXVldWUgZW1wdHkgKi8KKyNkZWZpbmUgRTEwMDBfSUNTX0xTQyAgICAgRTEwMDBfSUNSX0xTQwkvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KKyNkZWZpbmUgRTEwMDBfSUNTX1JYU0VRICAgRTEwMDBfSUNSX1JYU0VRCS8qIHJ4IHNlcXVlbmNlIGVycm9yICovCisjZGVmaW5lIEUxMDAwX0lDU19SWERNVDAgIEUxMDAwX0lDUl9SWERNVDAJLyogcnggZGVzYyBtaW4uIHRocmVzaG9sZCAqLworI2RlZmluZSBFMTAwMF9JQ1NfUlhPICAgICBFMTAwMF9JQ1JfUlhPCS8qIHJ4IG92ZXJydW4gKi8KKyNkZWZpbmUgRTEwMDBfSUNTX1JYVDAgICAgRTEwMDBfSUNSX1JYVDAJLyogcnggdGltZXIgaW50ciAqLworI2RlZmluZSBFMTAwMF9JQ1NfTURBQyAgICBFMTAwMF9JQ1JfTURBQwkvKiBNRElPIGFjY2VzcyBjb21wbGV0ZSAqLworI2RlZmluZSBFMTAwMF9JQ1NfUlhDRkcgICBFMTAwMF9JQ1JfUlhDRkcJLyogUlggL2MvIG9yZGVyZWQgc2V0ICovCisjZGVmaW5lIEUxMDAwX0lDU19HUElfRU4wIEUxMDAwX0lDUl9HUElfRU4wCS8qIEdQIEludCAwICovCisjZGVmaW5lIEUxMDAwX0lDU19HUElfRU4xIEUxMDAwX0lDUl9HUElfRU4xCS8qIEdQIEludCAxICovCisjZGVmaW5lIEUxMDAwX0lDU19HUElfRU4yIEUxMDAwX0lDUl9HUElfRU4yCS8qIEdQIEludCAyICovCisjZGVmaW5lIEUxMDAwX0lDU19HUElfRU4zIEUxMDAwX0lDUl9HUElfRU4zCS8qIEdQIEludCAzICovCisjZGVmaW5lIEUxMDAwX0lDU19UWERfTE9XIEUxMDAwX0lDUl9UWERfTE9XCisjZGVmaW5lIEUxMDAwX0lDU19TUlBEICAgIEUxMDAwX0lDUl9TUlBECisKKy8qIEludGVycnVwdCBNYXNrIFNldCAqLworI2RlZmluZSBFMTAwMF9JTVNfVFhEVyAgICBFMTAwMF9JQ1JfVFhEVwkvKiBUcmFuc21pdCBkZXNjIHdyaXR0ZW4gYmFjayAqLworI2RlZmluZSBFMTAwMF9JTVNfVFhRRSAgICBFMTAwMF9JQ1JfVFhRRQkvKiBUcmFuc21pdCBRdWV1ZSBlbXB0eSAqLworI2RlZmluZSBFMTAwMF9JTVNfTFNDICAgICBFMTAwMF9JQ1JfTFNDCS8qIExpbmsgU3RhdHVzIENoYW5nZSAqLworI2RlZmluZSBFMTAwMF9JTVNfUlhTRVEgICBFMTAwMF9JQ1JfUlhTRVEJLyogcnggc2VxdWVuY2UgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX1JYRE1UMCAgRTEwMDBfSUNSX1JYRE1UMAkvKiByeCBkZXNjIG1pbi4gdGhyZXNob2xkICovCisjZGVmaW5lIEUxMDAwX0lNU19SWE8gICAgIEUxMDAwX0lDUl9SWE8JLyogcnggb3ZlcnJ1biAqLworI2RlZmluZSBFMTAwMF9JTVNfUlhUMCAgICBFMTAwMF9JQ1JfUlhUMAkvKiByeCB0aW1lciBpbnRyICovCisjZGVmaW5lIEUxMDAwX0lNU19NREFDICAgIEUxMDAwX0lDUl9NREFDCS8qIE1ESU8gYWNjZXNzIGNvbXBsZXRlICovCisjZGVmaW5lIEUxMDAwX0lNU19SWENGRyAgIEUxMDAwX0lDUl9SWENGRwkvKiBSWCAvYy8gb3JkZXJlZCBzZXQgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX0dQSV9FTjAgRTEwMDBfSUNSX0dQSV9FTjAJLyogR1AgSW50IDAgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX0dQSV9FTjEgRTEwMDBfSUNSX0dQSV9FTjEJLyogR1AgSW50IDEgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX0dQSV9FTjIgRTEwMDBfSUNSX0dQSV9FTjIJLyogR1AgSW50IDIgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX0dQSV9FTjMgRTEwMDBfSUNSX0dQSV9FTjMJLyogR1AgSW50IDMgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX1RYRF9MT1cgRTEwMDBfSUNSX1RYRF9MT1cKKyNkZWZpbmUgRTEwMDBfSU1TX1NSUEQgICAgRTEwMDBfSUNSX1NSUEQKKworLyogSW50ZXJydXB0IE1hc2sgQ2xlYXIgKi8KKyNkZWZpbmUgRTEwMDBfSU1DX1RYRFcgICAgRTEwMDBfSUNSX1RYRFcJLyogVHJhbnNtaXQgZGVzYyB3cml0dGVuIGJhY2sgKi8KKyNkZWZpbmUgRTEwMDBfSU1DX1RYUUUgICAgRTEwMDBfSUNSX1RYUUUJLyogVHJhbnNtaXQgUXVldWUgZW1wdHkgKi8KKyNkZWZpbmUgRTEwMDBfSU1DX0xTQyAgICAgRTEwMDBfSUNSX0xTQwkvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KKyNkZWZpbmUgRTEwMDBfSU1DX1JYU0VRICAgRTEwMDBfSUNSX1JYU0VRCS8qIHJ4IHNlcXVlbmNlIGVycm9yICovCisjZGVmaW5lIEUxMDAwX0lNQ19SWERNVDAgIEUxMDAwX0lDUl9SWERNVDAJLyogcnggZGVzYyBtaW4uIHRocmVzaG9sZCAqLworI2RlZmluZSBFMTAwMF9JTUNfUlhPICAgICBFMTAwMF9JQ1JfUlhPCS8qIHJ4IG92ZXJydW4gKi8KKyNkZWZpbmUgRTEwMDBfSU1DX1JYVDAgICAgRTEwMDBfSUNSX1JYVDAJLyogcnggdGltZXIgaW50ciAqLworI2RlZmluZSBFMTAwMF9JTUNfTURBQyAgICBFMTAwMF9JQ1JfTURBQwkvKiBNRElPIGFjY2VzcyBjb21wbGV0ZSAqLworI2RlZmluZSBFMTAwMF9JTUNfUlhDRkcgICBFMTAwMF9JQ1JfUlhDRkcJLyogUlggL2MvIG9yZGVyZWQgc2V0ICovCisjZGVmaW5lIEUxMDAwX0lNQ19HUElfRU4wIEUxMDAwX0lDUl9HUElfRU4wCS8qIEdQIEludCAwICovCisjZGVmaW5lIEUxMDAwX0lNQ19HUElfRU4xIEUxMDAwX0lDUl9HUElfRU4xCS8qIEdQIEludCAxICovCisjZGVmaW5lIEUxMDAwX0lNQ19HUElfRU4yIEUxMDAwX0lDUl9HUElfRU4yCS8qIEdQIEludCAyICovCisjZGVmaW5lIEUxMDAwX0lNQ19HUElfRU4zIEUxMDAwX0lDUl9HUElfRU4zCS8qIEdQIEludCAzICovCisjZGVmaW5lIEUxMDAwX0lNQ19UWERfTE9XIEUxMDAwX0lDUl9UWERfTE9XCisjZGVmaW5lIEUxMDAwX0lNQ19TUlBEICAgIEUxMDAwX0lDUl9TUlBECisKKy8qIFJlY2VpdmUgQ29udHJvbCAqLworI2RlZmluZSBFMTAwMF9SQ1RMX1JTVCAgICAgICAgICAweDAwMDAwMDAxCS8qIFNvZnR3YXJlIHJlc2V0ICovCisjZGVmaW5lIEUxMDAwX1JDVExfRU4gICAgICAgICAgIDB4MDAwMDAwMDIJLyogZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1JDVExfU0JQICAgICAgICAgIDB4MDAwMDAwMDQJLyogc3RvcmUgYmFkIHBhY2tldCAqLworI2RlZmluZSBFMTAwMF9SQ1RMX1VQRSAgICAgICAgICAweDAwMDAwMDA4CS8qIHVuaWNhc3QgcHJvbWlzY3VvdXMgZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1JDVExfTVBFICAgICAgICAgIDB4MDAwMDAwMTAJLyogbXVsdGljYXN0IHByb21pc2N1b3VzIGVuYWIgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9MUEUgICAgICAgICAgMHgwMDAwMDAyMAkvKiBsb25nIHBhY2tldCBlbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9MQk1fTk8gICAgICAgMHgwMDAwMDAwMAkvKiBubyBsb29wYmFjayBtb2RlICovCisjZGVmaW5lIEUxMDAwX1JDVExfTEJNX01BQyAgICAgIDB4MDAwMDAwNDAJLyogTUFDIGxvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9MQk1fU0xQICAgICAgMHgwMDAwMDA4MAkvKiBzZXJpYWwgbGluayBsb29wYmFjayBtb2RlICovCisjZGVmaW5lIEUxMDAwX1JDVExfTEJNX1RDVlIgICAgIDB4MDAwMDAwQzAJLyogdGN2ciBsb29wYmFjayBtb2RlICovCisjZGVmaW5lIEUxMDAwX1JDVExfUkRNVFNfSEFMRiAgIDB4MDAwMDAwMDAJLyogcnggZGVzYyBtaW4gdGhyZXNob2xkIHNpemUgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9SRE1UU19RVUFUICAgMHgwMDAwMDEwMAkvKiByeCBkZXNjIG1pbiB0aHJlc2hvbGQgc2l6ZSAqLworI2RlZmluZSBFMTAwMF9SQ1RMX1JETVRTX0VJR1RIICAweDAwMDAwMjAwCS8qIHJ4IGRlc2MgbWluIHRocmVzaG9sZCBzaXplICovCisjZGVmaW5lIEUxMDAwX1JDVExfTU9fU0hJRlQgICAgIDEyCS8qIG11bHRpY2FzdCBvZmZzZXQgc2hpZnQgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9NT18wICAgICAgICAgMHgwMDAwMDAwMAkvKiBtdWx0aWNhc3Qgb2Zmc2V0IDExOjAgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9NT18xICAgICAgICAgMHgwMDAwMTAwMAkvKiBtdWx0aWNhc3Qgb2Zmc2V0IDEyOjEgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9NT18yICAgICAgICAgMHgwMDAwMjAwMAkvKiBtdWx0aWNhc3Qgb2Zmc2V0IDEzOjIgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9NT18zICAgICAgICAgMHgwMDAwMzAwMAkvKiBtdWx0aWNhc3Qgb2Zmc2V0IDE1OjQgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9NRFIgICAgICAgICAgMHgwMDAwNDAwMAkvKiBtdWx0aWNhc3QgZGVzYyByaW5nIDAgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9CQU0gICAgICAgICAgMHgwMDAwODAwMAkvKiBicm9hZGNhc3QgZW5hYmxlICovCisvKiB0aGVzZSBidWZmZXIgc2l6ZXMgYXJlIHZhbGlkIGlmIEUxMDAwX1JDVExfQlNFWCBpcyAwICovCisjZGVmaW5lIEUxMDAwX1JDVExfU1pfMjA0OCAgICAgIDB4MDAwMDAwMDAJLyogcnggYnVmZmVyIHNpemUgMjA0OCAqLworI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzEwMjQgICAgICAweDAwMDEwMDAwCS8qIHJ4IGJ1ZmZlciBzaXplIDEwMjQgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9TWl81MTIgICAgICAgMHgwMDAyMDAwMAkvKiByeCBidWZmZXIgc2l6ZSA1MTIgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9TWl8yNTYgICAgICAgMHgwMDAzMDAwMAkvKiByeCBidWZmZXIgc2l6ZSAyNTYgKi8KKy8qIHRoZXNlIGJ1ZmZlciBzaXplcyBhcmUgdmFsaWQgaWYgRTEwMDBfUkNUTF9CU0VYIGlzIDEgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9TWl8xNjM4NCAgICAgMHgwMDAxMDAwMAkvKiByeCBidWZmZXIgc2l6ZSAxNjM4NCAqLworI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzgxOTIgICAgICAweDAwMDIwMDAwCS8qIHJ4IGJ1ZmZlciBzaXplIDgxOTIgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9TWl80MDk2ICAgICAgMHgwMDAzMDAwMAkvKiByeCBidWZmZXIgc2l6ZSA0MDk2ICovCisjZGVmaW5lIEUxMDAwX1JDVExfVkZFICAgICAgICAgIDB4MDAwNDAwMDAJLyogdmxhbiBmaWx0ZXIgZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1JDVExfQ0ZJRU4gICAgICAgIDB4MDAwODAwMDAJLyogY2Fub25pY2FsIGZvcm0gZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1JDVExfQ0ZJICAgICAgICAgIDB4MDAxMDAwMDAJLyogY2Fub25pY2FsIGZvcm0gaW5kaWNhdG9yICovCisjZGVmaW5lIEUxMDAwX1JDVExfRFBGICAgICAgICAgIDB4MDA0MDAwMDAJLyogZGlzY2FyZCBwYXVzZSBmcmFtZXMgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9QTUNGICAgICAgICAgMHgwMDgwMDAwMAkvKiBwYXNzIE1BQyBjb250cm9sIGZyYW1lcyAqLworI2RlZmluZSBFMTAwMF9SQ1RMX0JTRVggICAgICAgICAweDAyMDAwMDAwCS8qIEJ1ZmZlciBzaXplIGV4dGVuc2lvbiAqLworCisvKiBSZWNlaXZlIERlc2NyaXB0b3IgKi8KKyNkZWZpbmUgRTEwMDBfUkRUX0RFTEFZIDB4MDAwMGZmZmYJLyogRGVsYXkgdGltZXIgKDE9MTAyNHVzKSAqLworI2RlZmluZSBFMTAwMF9SRFRfRlBEQiAgMHg4MDAwMDAwMAkvKiBGbHVzaCBkZXNjcmlwdG9yIGJsb2NrICovCisjZGVmaW5lIEUxMDAwX1JETEVOX0xFTiAweDAwMDdmZjgwCS8qIGRlc2NyaXB0b3IgbGVuZ3RoICovCisjZGVmaW5lIEUxMDAwX1JESF9SREggICAweDAwMDBmZmZmCS8qIHJlY2VpdmUgZGVzY3JpcHRvciBoZWFkICovCisjZGVmaW5lIEUxMDAwX1JEVF9SRFQgICAweDAwMDBmZmZmCS8qIHJlY2VpdmUgZGVzY3JpcHRvciB0YWlsICovCisKKy8qIEZsb3cgQ29udHJvbCAqLworI2RlZmluZSBFMTAwMF9GQ1JUSF9SVEggIDB4MDAwMEZGRjgJLyogTWFzayBCaXRzWzE1OjNdIGZvciBSVEggKi8KKyNkZWZpbmUgRTEwMDBfRkNSVEhfWEZDRSAweDgwMDAwMDAwCS8qIEV4dGVybmFsIEZsb3cgQ29udHJvbCBFbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfRkNSVExfUlRMICAweDAwMDBGRkY4CS8qIE1hc2sgQml0c1sxNTozXSBmb3IgUlRMICovCisjZGVmaW5lIEUxMDAwX0ZDUlRMX1hPTkUgMHg4MDAwMDAwMAkvKiBFbmFibGUgWE9OIGZyYW1lIHRyYW5zbWlzc2lvbiAqLworCisvKiBSZWNlaXZlIERlc2NyaXB0b3IgQ29udHJvbCAqLworI2RlZmluZSBFMTAwMF9SWERDVExfUFRIUkVTSCAweDAwMDAwMDNGCS8qIFJYRENUTCBQcmVmZXRjaCBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgRTEwMDBfUlhEQ1RMX0hUSFJFU0ggMHgwMDAwM0YwMAkvKiBSWERDVEwgSG9zdCBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgRTEwMDBfUlhEQ1RMX1dUSFJFU0ggMHgwMDNGMDAwMAkvKiBSWERDVEwgV3JpdGViYWNrIFRocmVzaG9sZCAqLworI2RlZmluZSBFMTAwMF9SWERDVExfR1JBTiAgICAweDAxMDAwMDAwCS8qIFJYRENUTCBHcmFudWxhcml0eSAqLworCisvKiBUcmFuc21pdCBEZXNjcmlwdG9yIENvbnRyb2wgKi8KKyNkZWZpbmUgRTEwMDBfVFhEQ1RMX1BUSFJFU0ggMHgwMDAwMDBGRgkvKiBUWERDVEwgUHJlZmV0Y2ggVGhyZXNob2xkICovCisjZGVmaW5lIEUxMDAwX1RYRENUTF9IVEhSRVNIIDB4MDAwMEZGMDAJLyogVFhEQ1RMIEhvc3QgVGhyZXNob2xkICovCisjZGVmaW5lIEUxMDAwX1RYRENUTF9XVEhSRVNIIDB4MDBGRjAwMDAJLyogVFhEQ1RMIFdyaXRlYmFjayBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgRTEwMDBfVFhEQ1RMX0dSQU4gICAgMHgwMTAwMDAwMAkvKiBUWERDVEwgR3JhbnVsYXJpdHkgKi8KKyNkZWZpbmUgRTEwMDBfVFhEQ1RMX0xXVEhSRVNIIDB4RkUwMDAwMDAJLyogVFhEQ1RMIExvdyBUaHJlc2hvbGQgKi8KKyNkZWZpbmUgRTEwMDBfVFhEQ1RMX0ZVTExfVFhfREVTQ19XQiAweDAxMDEwMDAwCS8qIEdSQU49MSwgV1RIUkVTSD0xICovCisKKy8qIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gV29yZCAqLworI2RlZmluZSBFMTAwMF9UWENXX0ZEICAgICAgICAgMHgwMDAwMDAyMAkvKiBUWENXIGZ1bGwgZHVwbGV4ICovCisjZGVmaW5lIEUxMDAwX1RYQ1dfSEQgICAgICAgICAweDAwMDAwMDQwCS8qIFRYQ1cgaGFsZiBkdXBsZXggKi8KKyNkZWZpbmUgRTEwMDBfVFhDV19QQVVTRSAgICAgIDB4MDAwMDAwODAJLyogVFhDVyBzeW0gcGF1c2UgcmVxdWVzdCAqLworI2RlZmluZSBFMTAwMF9UWENXX0FTTV9ESVIgICAgMHgwMDAwMDEwMAkvKiBUWENXIGFzdG0gcGF1c2UgZGlyZWN0aW9uICovCisjZGVmaW5lIEUxMDAwX1RYQ1dfUEFVU0VfTUFTSyAweDAwMDAwMTgwCS8qIFRYQ1cgcGF1c2UgcmVxdWVzdCBtYXNrICovCisjZGVmaW5lIEUxMDAwX1RYQ1dfUkYgICAgICAgICAweDAwMDAzMDAwCS8qIFRYQ1cgcmVtb3RlIGZhdWx0ICovCisjZGVmaW5lIEUxMDAwX1RYQ1dfTlAgICAgICAgICAweDAwMDA4MDAwCS8qIFRYQ1cgbmV4dCBwYWdlICovCisjZGVmaW5lIEUxMDAwX1RYQ1dfQ1cgICAgICAgICAweDAwMDBmZmZmCS8qIFR4Q29uZmlnV29yZCBtYXNrICovCisjZGVmaW5lIEUxMDAwX1RYQ1dfVFhDICAgICAgICAweDQwMDAwMDAwCS8qIFRyYW5zbWl0IENvbmZpZyBjb250cm9sICovCisjZGVmaW5lIEUxMDAwX1RYQ1dfQU5FICAgICAgICAweDgwMDAwMDAwCS8qIEF1dG8tbmVnIGVuYWJsZSAqLworCisvKiBSZWNlaXZlIENvbmZpZ3VyYXRpb24gV29yZCAqLworI2RlZmluZSBFMTAwMF9SWENXX0NXICAgIDB4MDAwMGZmZmYJLyogUnhDb25maWdXb3JkIG1hc2sgKi8KKyNkZWZpbmUgRTEwMDBfUlhDV19OQyAgICAweDA0MDAwMDAwCS8qIFJlY2VpdmUgY29uZmlnIG5vIGNhcnJpZXIgKi8KKyNkZWZpbmUgRTEwMDBfUlhDV19JViAgICAweDA4MDAwMDAwCS8qIFJlY2VpdmUgY29uZmlnIGludmFsaWQgKi8KKyNkZWZpbmUgRTEwMDBfUlhDV19DQyAgICAweDEwMDAwMDAwCS8qIFJlY2VpdmUgY29uZmlnIGNoYW5nZSAqLworI2RlZmluZSBFMTAwMF9SWENXX0MgICAgIDB4MjAwMDAwMDAJLyogUmVjZWl2ZSBjb25maWcgKi8KKyNkZWZpbmUgRTEwMDBfUlhDV19TWU5DSCAweDQwMDAwMDAwCS8qIFJlY2VpdmUgY29uZmlnIHN5bmNoICovCisjZGVmaW5lIEUxMDAwX1JYQ1dfQU5DICAgMHg4MDAwMDAwMAkvKiBBdXRvLW5lZyBjb21wbGV0ZSAqLworCisvKiBUcmFuc21pdCBDb250cm9sICovCisjZGVmaW5lIEUxMDAwX1RDVExfUlNUICAgIDB4MDAwMDAwMDEJLyogc29mdHdhcmUgcmVzZXQgKi8KKyNkZWZpbmUgRTEwMDBfVENUTF9FTiAgICAgMHgwMDAwMDAwMgkvKiBlbmFibGUgdHggKi8KKyNkZWZpbmUgRTEwMDBfVENUTF9CQ0UgICAgMHgwMDAwMDAwNAkvKiBidXN5IGNoZWNrIGVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9UQ1RMX1BTUCAgICAweDAwMDAwMDA4CS8qIHBhZCBzaG9ydCBwYWNrZXRzICovCisjZGVmaW5lIEUxMDAwX1RDVExfQ1QgICAgIDB4MDAwMDBmZjAJLyogY29sbGlzaW9uIHRocmVzaG9sZCAqLworI2RlZmluZSBFMTAwMF9UQ1RMX0NPTEQgICAweDAwM2ZmMDAwCS8qIGNvbGxpc2lvbiBkaXN0YW5jZSAqLworI2RlZmluZSBFMTAwMF9UQ1RMX1NXWE9GRiAweDAwNDAwMDAwCS8qIFNXIFhvZmYgdHJhbnNtaXNzaW9uICovCisjZGVmaW5lIEUxMDAwX1RDVExfUEJFICAgIDB4MDA4MDAwMDAJLyogUGFja2V0IEJ1cnN0IEVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9UQ1RMX1JUTEMgICAweDAxMDAwMDAwCS8qIFJlLXRyYW5zbWl0IG9uIGxhdGUgY29sbGlzaW9uICovCisjZGVmaW5lIEUxMDAwX1RDVExfTlJUVSAgIDB4MDIwMDAwMDAJLyogTm8gUmUtdHJhbnNtaXQgb24gdW5kZXJydW4gKi8KKworLyogUmVjZWl2ZSBDaGVja3N1bSBDb250cm9sICovCisjZGVmaW5lIEUxMDAwX1JYQ1NVTV9QQ1NTX01BU0sgMHgwMDAwMDBGRgkvKiBQYWNrZXQgQ2hlY2tzdW0gU3RhcnQgKi8KKyNkZWZpbmUgRTEwMDBfUlhDU1VNX0lQT0ZMICAgICAweDAwMDAwMTAwCS8qIElQdjQgY2hlY2tzdW0gb2ZmbG9hZCAqLworI2RlZmluZSBFMTAwMF9SWENTVU1fVFVPRkwgICAgIDB4MDAwMDAyMDAJLyogVENQIC8gVURQIGNoZWNrc3VtIG9mZmxvYWQgKi8KKyNkZWZpbmUgRTEwMDBfUlhDU1VNX0lQVjZPRkwgICAweDAwMDAwNDAwCS8qIElQdjYgY2hlY2tzdW0gb2ZmbG9hZCAqLworCisvKiBEZWZpbml0aW9ucyBmb3IgcG93ZXIgbWFuYWdlbWVudCBhbmQgd2FrZXVwIHJlZ2lzdGVycyAqLworLyogV2FrZSBVcCBDb250cm9sICovCisjZGVmaW5lIEUxMDAwX1dVQ19BUE1FICAgICAgIDB4MDAwMDAwMDEJLyogQVBNIEVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9XVUNfUE1FX0VOICAgICAweDAwMDAwMDAyCS8qIFBNRSBFbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfV1VDX1BNRV9TVEFUVVMgMHgwMDAwMDAwNAkvKiBQTUUgU3RhdHVzICovCisjZGVmaW5lIEUxMDAwX1dVQ19BUE1QTUUgICAgIDB4MDAwMDAwMDgJLyogQXNzZXJ0IFBNRSBvbiBBUE0gV2FrZXVwICovCisKKy8qIFdha2UgVXAgRmlsdGVyIENvbnRyb2wgKi8KKyNkZWZpbmUgRTEwMDBfV1VGQ19MTktDIDB4MDAwMDAwMDEJLyogTGluayBTdGF0dXMgQ2hhbmdlIFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfV1VGQ19NQUcgIDB4MDAwMDAwMDIJLyogTWFnaWMgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfV1VGQ19FWCAgIDB4MDAwMDAwMDQJLyogRGlyZWN0ZWQgRXhhY3QgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9XVUZDX01DICAgMHgwMDAwMDAwOAkvKiBEaXJlY3RlZCBNdWx0aWNhc3QgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9XVUZDX0JDICAgMHgwMDAwMDAxMAkvKiBCcm9hZGNhc3QgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9XVUZDX0FSUCAgMHgwMDAwMDAyMAkvKiBBUlAgUmVxdWVzdCBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9XVUZDX0lQVjQgMHgwMDAwMDA0MAkvKiBEaXJlY3RlZCBJUHY0IFBhY2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1dVRkNfSVBWNiAweDAwMDAwMDgwCS8qIERpcmVjdGVkIElQdjYgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfV1VGQ19GTFgwIDB4MDAwMTAwMDAJLyogRmxleGlibGUgRmlsdGVyIDAgRW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1dVRkNfRkxYMSAweDAwMDIwMDAwCS8qIEZsZXhpYmxlIEZpbHRlciAxIEVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9XVUZDX0ZMWDIgMHgwMDA0MDAwMAkvKiBGbGV4aWJsZSBGaWx0ZXIgMiBFbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfV1VGQ19GTFgzIDB4MDAwODAwMDAJLyogRmxleGlibGUgRmlsdGVyIDMgRW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1dVRkNfQUxMX0ZJTFRFUlMgMHgwMDBGMDBGRgkvKiBNYXNrIGZvciBhbGwgd2FrZXVwIGZpbHRlcnMgKi8KKyNkZWZpbmUgRTEwMDBfV1VGQ19GTFhfT0ZGU0VUIDE2CS8qIE9mZnNldCB0byB0aGUgRmxleGlibGUgRmlsdGVycyBiaXRzICovCisjZGVmaW5lIEUxMDAwX1dVRkNfRkxYX0ZJTFRFUlMgMHgwMDBGMDAwMAkvKiBNYXNrIGZvciB0aGUgNCBmbGV4aWJsZSBmaWx0ZXJzICovCisKKy8qIFdha2UgVXAgU3RhdHVzICovCisjZGVmaW5lIEUxMDAwX1dVU19MTktDIDB4MDAwMDAwMDEJLyogTGluayBTdGF0dXMgQ2hhbmdlZCAqLworI2RlZmluZSBFMTAwMF9XVVNfTUFHICAweDAwMDAwMDAyCS8qIE1hZ2ljIFBhY2tldCBSZWNlaXZlZCAqLworI2RlZmluZSBFMTAwMF9XVVNfRVggICAweDAwMDAwMDA0CS8qIERpcmVjdGVkIEV4YWN0IFJlY2VpdmVkICovCisjZGVmaW5lIEUxMDAwX1dVU19NQyAgIDB4MDAwMDAwMDgJLyogRGlyZWN0ZWQgTXVsdGljYXN0IFJlY2VpdmVkICovCisjZGVmaW5lIEUxMDAwX1dVU19CQyAgIDB4MDAwMDAwMTAJLyogQnJvYWRjYXN0IFJlY2VpdmVkICovCisjZGVmaW5lIEUxMDAwX1dVU19BUlAgIDB4MDAwMDAwMjAJLyogQVJQIFJlcXVlc3QgUGFja2V0IFJlY2VpdmVkICovCisjZGVmaW5lIEUxMDAwX1dVU19JUFY0IDB4MDAwMDAwNDAJLyogRGlyZWN0ZWQgSVB2NCBQYWNrZXQgV2FrZXVwIFJlY2VpdmVkICovCisjZGVmaW5lIEUxMDAwX1dVU19JUFY2IDB4MDAwMDAwODAJLyogRGlyZWN0ZWQgSVB2NiBQYWNrZXQgV2FrZXVwIFJlY2VpdmVkICovCisjZGVmaW5lIEUxMDAwX1dVU19GTFgwIDB4MDAwMTAwMDAJLyogRmxleGlibGUgRmlsdGVyIDAgTWF0Y2ggKi8KKyNkZWZpbmUgRTEwMDBfV1VTX0ZMWDEgMHgwMDAyMDAwMAkvKiBGbGV4aWJsZSBGaWx0ZXIgMSBNYXRjaCAqLworI2RlZmluZSBFMTAwMF9XVVNfRkxYMiAweDAwMDQwMDAwCS8qIEZsZXhpYmxlIEZpbHRlciAyIE1hdGNoICovCisjZGVmaW5lIEUxMDAwX1dVU19GTFgzIDB4MDAwODAwMDAJLyogRmxleGlibGUgRmlsdGVyIDMgTWF0Y2ggKi8KKyNkZWZpbmUgRTEwMDBfV1VTX0ZMWF9GSUxURVJTIDB4MDAwRjAwMDAJLyogTWFzayBmb3IgdGhlIDQgZmxleGlibGUgZmlsdGVycyAqLworCisvKiBNYW5hZ2VtZW50IENvbnRyb2wgKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19TTUJVU19FTiAgICAgIDB4MDAwMDAwMDEJLyogU01CdXMgRW5hYmxlZCAtIFJPICovCisjZGVmaW5lIEUxMDAwX01BTkNfQVNGX0VOICAgICAgICAweDAwMDAwMDAyCS8qIEFTRiBFbmFibGVkIC0gUk8gKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19SX09OX0ZPUkNFICAgIDB4MDAwMDAwMDQJLyogUmVzZXQgb24gRm9yY2UgVENPIC0gUk8gKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19STUNQX0VOICAgICAgIDB4MDAwMDAxMDAJLyogRW5hYmxlIFJDTVAgMDI2RmggRmlsdGVyaW5nICovCisjZGVmaW5lIEUxMDAwX01BTkNfMDI5OF9FTiAgICAgICAweDAwMDAwMjAwCS8qIEVuYWJsZSBSQ01QIDAyOThoIEZpbHRlcmluZyAqLworI2RlZmluZSBFMTAwMF9NQU5DX0lQVjRfRU4gICAgICAgMHgwMDAwMDQwMAkvKiBFbmFibGUgSVB2NCAqLworI2RlZmluZSBFMTAwMF9NQU5DX0lQVjZfRU4gICAgICAgMHgwMDAwMDgwMAkvKiBFbmFibGUgSVB2NiAqLworI2RlZmluZSBFMTAwMF9NQU5DX1NOQVBfRU4gICAgICAgMHgwMDAwMTAwMAkvKiBBY2NlcHQgTExDL1NOQVAgKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19BUlBfRU4gICAgICAgIDB4MDAwMDIwMDAJLyogRW5hYmxlIEFSUCBSZXF1ZXN0IEZpbHRlcmluZyAqLworI2RlZmluZSBFMTAwMF9NQU5DX05FSUdIQk9SX0VOICAgMHgwMDAwNDAwMAkvKiBFbmFibGUgTmVpZ2hib3IgRGlzY292ZXJ5IAorCQkJCQkJICogRmlsdGVyaW5nICovCisjZGVmaW5lIEUxMDAwX01BTkNfVENPX1JFU0VUICAgICAweDAwMDEwMDAwCS8qIFRDTyBSZXNldCBPY2N1cnJlZCAqLworI2RlZmluZSBFMTAwMF9NQU5DX1JDVl9UQ09fRU4gICAgMHgwMDAyMDAwMAkvKiBSZWNlaXZlIFRDTyBQYWNrZXRzIEVuYWJsZWQgKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19SRVBPUlRfU1RBVFVTIDB4MDAwNDAwMDAJLyogU3RhdHVzIFJlcG9ydGluZyBFbmFibGVkICovCisjZGVmaW5lIEUxMDAwX01BTkNfU01CX1JFUSAgICAgICAweDAxMDAwMDAwCS8qIFNNQnVzIFJlcXVlc3QgKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19TTUJfR05UICAgICAgIDB4MDIwMDAwMDAJLyogU01CdXMgR3JhbnQgKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19TTUJfQ0xLX0lOICAgIDB4MDQwMDAwMDAJLyogU01CdXMgQ2xvY2sgSW4gKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19TTUJfREFUQV9JTiAgIDB4MDgwMDAwMDAJLyogU01CdXMgRGF0YSBJbiAqLworI2RlZmluZSBFMTAwMF9NQU5DX1NNQl9EQVRBX09VVCAgMHgxMDAwMDAwMAkvKiBTTUJ1cyBEYXRhIE91dCAqLworI2RlZmluZSBFMTAwMF9NQU5DX1NNQl9DTEtfT1VUICAgMHgyMDAwMDAwMAkvKiBTTUJ1cyBDbG9jayBPdXQgKi8KKworI2RlZmluZSBFMTAwMF9NQU5DX1NNQl9EQVRBX09VVF9TSElGVCAgMjgJLyogU01CdXMgRGF0YSBPdXQgU2hpZnQgKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19TTUJfQ0xLX09VVF9TSElGVCAgIDI5CS8qIFNNQnVzIENsb2NrIE91dCBTaGlmdCAqLworCisvKiBXYWtlIFVwIFBhY2tldCBMZW5ndGggKi8KKyNkZWZpbmUgRTEwMDBfV1VQTF9MRU5HVEhfTUFTSyAweDBGRkYJLyogT25seSB0aGUgbG93ZXIgMTIgYml0cyBhcmUgdmFsaWQgKi8KKworI2RlZmluZSBFMTAwMF9NREFMSUdOICAgICAgICAgIDQwOTYKKworLyogRUVQUk9NIENvbW1hbmRzICovCisjZGVmaW5lIEVFUFJPTV9SRUFEX09QQ09ERSAgMHg2CS8qIEVFUlBPTSByZWFkIG9wY29kZSAqLworI2RlZmluZSBFRVBST01fV1JJVEVfT1BDT0RFIDB4NQkvKiBFRVJQT00gd3JpdGUgb3Bjb2RlICovCisjZGVmaW5lIEVFUFJPTV9FUkFTRV9PUENPREUgMHg3CS8qIEVFUlBPTSBlcmFzZSBvcGNvZGUgKi8KKyNkZWZpbmUgRUVQUk9NX0VXRU5fT1BDT0RFICAweDEzCS8qIEVFUlBPTSBlcmFzZS93cml0ZSBlbmFibGUgKi8KKyNkZWZpbmUgRUVQUk9NX0VXRFNfT1BDT0RFICAweDEwCS8qIEVFUlBPTSBlcmFzdC93cml0ZSBkaXNhYmxlICovCisKKy8qIEVFUFJPTSBXb3JkIE9mZnNldHMgKi8KKyNkZWZpbmUgRUVQUk9NX0NPTVBBVCAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIEVFUFJPTV9JRF9MRURfU0VUVElOR1MgICAgIDB4MDAwNAorI2RlZmluZSBFRVBST01fSU5JVF9DT05UUk9MMV9SRUcgICAweDAwMEEKKyNkZWZpbmUgRUVQUk9NX0lOSVRfQ09OVFJPTDJfUkVHICAgMHgwMDBGCisjZGVmaW5lIEVFUFJPTV9GTEFTSF9WRVJTSU9OICAgICAgIDB4MDAzMgorI2RlZmluZSBFRVBST01fQ0hFQ0tTVU1fUkVHICAgICAgICAweDAwM0YKKworLyogV29yZCBkZWZpbml0aW9ucyBmb3IgSUQgTEVEIFNldHRpbmdzICovCisjZGVmaW5lIElEX0xFRF9SRVNFUlZFRF8wMDAwIDB4MDAwMAorI2RlZmluZSBJRF9MRURfUkVTRVJWRURfRkZGRiAweEZGRkYKKyNkZWZpbmUgSURfTEVEX0RFRkFVTFQgICAgICAgKChJRF9MRURfT0ZGMV9PTjIgPDwgMTIpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElEX0xFRF9PRkYxX09GRjIgPDwgOCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSURfTEVEX0RFRjFfREVGMiA8PCA0KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJRF9MRURfREVGMV9ERUYyKSkKKyNkZWZpbmUgSURfTEVEX0RFRjFfREVGMiAgICAgMHgxCisjZGVmaW5lIElEX0xFRF9ERUYxX09OMiAgICAgIDB4MgorI2RlZmluZSBJRF9MRURfREVGMV9PRkYyICAgICAweDMKKyNkZWZpbmUgSURfTEVEX09OMV9ERUYyICAgICAgMHg0CisjZGVmaW5lIElEX0xFRF9PTjFfT04yICAgICAgIDB4NQorI2RlZmluZSBJRF9MRURfT04xX09GRjIgICAgICAweDYKKyNkZWZpbmUgSURfTEVEX09GRjFfREVGMiAgICAgMHg3CisjZGVmaW5lIElEX0xFRF9PRkYxX09OMiAgICAgIDB4OAorI2RlZmluZSBJRF9MRURfT0ZGMV9PRkYyICAgICAweDkKKworLyogTWFzayBiaXRzIGZvciBmaWVsZHMgaW4gV29yZCAweDAzIG9mIHRoZSBFRVBST00gKi8KKyNkZWZpbmUgRUVQUk9NX0NPTVBBVF9TRVJWRVIgMHgwNDAwCisjZGVmaW5lIEVFUFJPTV9DT01QQVRfQ0xJRU5UIDB4MDIwMAorCisvKiBNYXNrIGJpdHMgZm9yIGZpZWxkcyBpbiBXb3JkIDB4MGEgb2YgdGhlIEVFUFJPTSAqLworI2RlZmluZSBFRVBST01fV09SRDBBX0lMT1MgICAweDAwMTAKKyNkZWZpbmUgRUVQUk9NX1dPUkQwQV9TV0RQSU8gMHgwMUUwCisjZGVmaW5lIEVFUFJPTV9XT1JEMEFfTFJTVCAgIDB4MDIwMAorI2RlZmluZSBFRVBST01fV09SRDBBX0ZEICAgICAweDA0MDAKKyNkZWZpbmUgRUVQUk9NX1dPUkQwQV82Nk1IWiAgMHgwODAwCisKKy8qIE1hc2sgYml0cyBmb3IgZmllbGRzIGluIFdvcmQgMHgwZiBvZiB0aGUgRUVQUk9NICovCisjZGVmaW5lIEVFUFJPTV9XT1JEMEZfUEFVU0VfTUFTSyAweDMwMDAKKyNkZWZpbmUgRUVQUk9NX1dPUkQwRl9QQVVTRSAgICAgIDB4MTAwMAorI2RlZmluZSBFRVBST01fV09SRDBGX0FTTV9ESVIgICAgMHgyMDAwCisjZGVmaW5lIEVFUFJPTV9XT1JEMEZfQU5FICAgICAgICAweDA4MDAKKyNkZWZpbmUgRUVQUk9NX1dPUkQwRl9TV1BESU9fRVhUIDB4MDBGMAorCisvKiBGb3IgY2hlY2tzdW1taW5nLCB0aGUgc3VtIG9mIGFsbCB3b3JkcyBpbiB0aGUgRUVQUk9NIHNob3VsZCBlcXVhbCAweEJBQkEuICovCisjZGVmaW5lIEVFUFJPTV9TVU0gMHhCQUJBCisKKy8qIEVFUFJPTSBNYXAgZGVmaW5lcyAoV09SRCBPRkZTRVRTKSovCisjZGVmaW5lIEVFUFJPTV9OT0RFX0FERFJFU1NfQllURV8wIDAKKyNkZWZpbmUgRUVQUk9NX1BCQV9CWVRFXzEgICAgICAgICAgOAorCisvKiBFRVBST00gTWFwIFNpemVzIChCeXRlIENvdW50cykgKi8KKyNkZWZpbmUgUEJBX1NJWkUgNAorCisvKiBDb2xsaXNpb24gcmVsYXRlZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgRTEwMDBfQ09MTElTSU9OX1RIUkVTSE9MRCAgICAgICAxNgorI2RlZmluZSBFMTAwMF9DVF9TSElGVCAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRTEwMDBfQ09MTElTSU9OX0RJU1RBTkNFICAgICAgICA2NAorI2RlZmluZSBFMTAwMF9GRFhfQ09MTElTSU9OX0RJU1RBTkNFICAgIEUxMDAwX0NPTExJU0lPTl9ESVNUQU5DRQorI2RlZmluZSBFMTAwMF9IRFhfQ09MTElTSU9OX0RJU1RBTkNFICAgIEUxMDAwX0NPTExJU0lPTl9ESVNUQU5DRQorI2RlZmluZSBFMTAwMF9HQl9IRFhfQ09MTElTSU9OX0RJU1RBTkNFIDUxMgorI2RlZmluZSBFMTAwMF9DT0xEX1NISUZUICAgICAgICAgICAgICAgIDEyCisKKy8qIFRoZSBudW1iZXIgb2YgVHJhbnNtaXQgYW5kIFJlY2VpdmUgRGVzY3JpcHRvcnMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDggKi8KKyNkZWZpbmUgUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUgIDgKKyNkZWZpbmUgUkVRX1JYX0RFU0NSSVBUT1JfTVVMVElQTEUgIDgKKworLyogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSB0cmFuc21pdCBJUEcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgREVGQVVMVF84MjU0Ml9USVBHX0lQR1QgICAgICAgIDEwCisjZGVmaW5lIERFRkFVTFRfODI1NDNfVElQR19JUEdUX0ZJQkVSICA5CisjZGVmaW5lIERFRkFVTFRfODI1NDNfVElQR19JUEdUX0NPUFBFUiA4CisKKyNkZWZpbmUgRTEwMDBfVElQR19JUEdUX01BU0sgIDB4MDAwMDAzRkYKKyNkZWZpbmUgRTEwMDBfVElQR19JUEdSMV9NQVNLIDB4MDAwRkZDMDAKKyNkZWZpbmUgRTEwMDBfVElQR19JUEdSMl9NQVNLIDB4M0ZGMDAwMDAKKworI2RlZmluZSBERUZBVUxUXzgyNTQyX1RJUEdfSVBHUjEgMgorI2RlZmluZSBERUZBVUxUXzgyNTQzX1RJUEdfSVBHUjEgOAorI2RlZmluZSBFMTAwMF9USVBHX0lQR1IxX1NISUZUICAxMAorCisjZGVmaW5lIERFRkFVTFRfODI1NDJfVElQR19JUEdSMiAxMAorI2RlZmluZSBERUZBVUxUXzgyNTQzX1RJUEdfSVBHUjIgNgorI2RlZmluZSBFMTAwMF9USVBHX0lQR1IyX1NISUZUICAyMAorCisjZGVmaW5lIEUxMDAwX1RYRE1BQ19EUFAgMHgwMDAwMDAwMQorCisvKiBBZGFwdGl2ZSBJRlMgZGVmaW5lcyAqLworI2RlZmluZSBUWF9USFJFU0hPTERfU1RBUlQgICAgIDgKKyNkZWZpbmUgVFhfVEhSRVNIT0xEX0lOQ1JFTUVOVCAxMAorI2RlZmluZSBUWF9USFJFU0hPTERfREVDUkVNRU5UIDEKKyNkZWZpbmUgVFhfVEhSRVNIT0xEX1NUT1AgICAgICAxOTAKKyNkZWZpbmUgVFhfVEhSRVNIT0xEX0RJU0FCTEUgICAwCisjZGVmaW5lIFRYX1RIUkVTSE9MRF9USU1FUl9NUyAgMTAwMDAKKyNkZWZpbmUgTUlOX05VTV9YTUlUUyAgICAgICAgICAxMDAwCisjZGVmaW5lIElGU19NQVggICAgICAgICAgICAgICAgODAKKyNkZWZpbmUgSUZTX1NURVAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJRlNfTUlOICAgICAgICAgICAgICAgIDQwCisjZGVmaW5lIElGU19SQVRJTyAgICAgICAgICAgICAgNAorCisvKiBQQkEgY29uc3RhbnRzICovCisjZGVmaW5lIEUxMDAwX1BCQV8xNksgMHgwMDEwCS8qIDE2S0IsIGRlZmF1bHQgVFggYWxsb2NhdGlvbiAqLworI2RlZmluZSBFMTAwMF9QQkFfMjRLIDB4MDAxOAorI2RlZmluZSBFMTAwMF9QQkFfNDBLIDB4MDAyOAorI2RlZmluZSBFMTAwMF9QQkFfNDhLIDB4MDAzMAkvKiA0OEtCLCBkZWZhdWx0IFJYIGFsbG9jYXRpb24gKi8KKworLyogRmxvdyBDb250cm9sIENvbnN0YW50cyAqLworI2RlZmluZSBGTE9XX0NPTlRST0xfQUREUkVTU19MT1cgIDB4MDBDMjgwMDEKKyNkZWZpbmUgRkxPV19DT05UUk9MX0FERFJFU1NfSElHSCAweDAwMDAwMTAwCisjZGVmaW5lIEZMT1dfQ09OVFJPTF9UWVBFICAgICAgICAgMHg4ODA4CisKKy8qIFRoZSBoaXN0b3JpY2FsIGRlZmF1bHRzIGZvciB0aGUgZmxvdyBjb250cm9sIHZhbHVlcyBhcmUgZ2l2ZW4gYmVsb3cuICovCisjZGVmaW5lIEZDX0RFRkFVTFRfSElfVEhSRVNIICAgICAgICAoMHg4MDAwKQkvKiAzMktCICovCisjZGVmaW5lIEZDX0RFRkFVTFRfTE9fVEhSRVNIICAgICAgICAoMHg0MDAwKQkvKiAxNktCICovCisjZGVmaW5lIEZDX0RFRkFVTFRfVFhfVElNRVIgICAgICAgICAoMHgxMDApCS8qIH4xMzAgdXMgKi8KKworLyogRmxvdyBDb250cm9sIEhpZ2gtV2F0ZXJtYXJrOiA0MzQ2NCBieXRlcyAqLworI2RlZmluZSBFMTAwMF9GQ19ISUdIX1RIUkVTSCAweEE5QzgKKy8qIEZsb3cgQ29udHJvbCBMb3ctV2F0ZXJtYXJrOiA0MzQ1NiBieXRlcyAqLworI2RlZmluZSBFMTAwMF9GQ19MT1dfVEhSRVNIIDB4QTlDMAorLyogRmxvdyBDb250cm9sIFBhdXNlIFRpbWU6IDg1OCB1c2VjICovCisjZGVmaW5lIEUxMDAwX0ZDX1BBVVNFX1RJTUUgMHgwNjgwCisKKy8qIFBDSVggQ29uZmlnIHNwYWNlICovCisjZGVmaW5lIFBDSVhfQ09NTUFORF9SRUdJU1RFUiAgICAweEU2CisjZGVmaW5lIFBDSVhfU1RBVFVTX1JFR0lTVEVSX0xPICAweEU4CisjZGVmaW5lIFBDSVhfU1RBVFVTX1JFR0lTVEVSX0hJICAweEVBCisKKyNkZWZpbmUgUENJWF9DT01NQU5EX01NUkJDX01BU0sgICAgICAweDAwMEMKKyNkZWZpbmUgUENJWF9DT01NQU5EX01NUkJDX1NISUZUICAgICAweDIKKyNkZWZpbmUgUENJWF9TVEFUVVNfSElfTU1SQkNfTUFTSyAgICAweDAwNjAKKyNkZWZpbmUgUENJWF9TVEFUVVNfSElfTU1SQkNfU0hJRlQgICAweDUKKyNkZWZpbmUgUENJWF9TVEFUVVNfSElfTU1SQkNfNEsgICAgICAweDMKKyNkZWZpbmUgUENJWF9TVEFUVVNfSElfTU1SQkNfMksgICAgICAweDIKKworLyogVGhlIG51bWJlciBvZiBiaXRzIHRoYXQgd2UgbmVlZCB0byBzaGlmdCByaWdodCB0byBtb3ZlIHRoZSAicGF1c2UiCisgKiBiaXRzIGZyb20gdGhlIEVFUFJPTSAoYml0cyAxMzoxMikgdG8gdGhlICJwYXVzZSIgKGJpdHMgODo3KSBmaWVsZAorICogaW4gdGhlIFRYQ1cgcmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgUEFVU0VfU0hJRlQgNQorCisvKiBUaGUgbnVtYmVyIG9mIGJpdHMgdGhhdCB3ZSBuZWVkIHRvIHNoaWZ0IGxlZnQgdG8gbW92ZSB0aGUgIlNXRFBJTyIKKyAqIGJpdHMgZnJvbSB0aGUgRUVQUk9NIChiaXRzIDg6NSkgdG8gdGhlICJTV0RQSU8iIChiaXRzIDI1OjIyKSBmaWVsZAorICogaW4gdGhlIENUUkwgcmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgU1dEUElPX1NISUZUIDE3CisKKy8qIFRoZSBudW1iZXIgb2YgYml0cyB0aGF0IHdlIG5lZWQgdG8gc2hpZnQgbGVmdCB0byBtb3ZlIHRoZSAiU1dEUElPX0VYVCIKKyAqIGJpdHMgZnJvbSB0aGUgRUVQUk9NIHdvcmQgRiAoYml0cyA3OjQpIHRvIHRoZSBiaXRzIDExOjggb2YgVGhlCisgKiBFeHRlbmRlZCBDVFJMIHJlZ2lzdGVyLgorICogaW4gdGhlIENUUkwgcmVnaXN0ZXIgCisgKi8KKyNkZWZpbmUgU1dEUElPX19FWFRfU0hJRlQgNAorCisvKiBUaGUgbnVtYmVyIG9mIGJpdHMgdGhhdCB3ZSBuZWVkIHRvIHNoaWZ0IGxlZnQgdG8gbW92ZSB0aGUgIklMT1MiCisgKiBiaXQgZnJvbSB0aGUgRUVQUk9NIChiaXQgNCkgdG8gdGhlICJJTE9TIiAoYml0IDcpIGZpZWxkCisgKiBpbiB0aGUgQ1RSTCByZWdpc3RlciAKKyAqLworI2RlZmluZSBJTE9TX1NISUZUICAzCisKKyNkZWZpbmUgUkVDRUlWRV9CVUZGRVJfQUxJR05fU0laRSAgKDI1NikKKworLyogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgd2Ugd2FpdCBmb3IgYXV0by1uZWdvdGlhdGlvbiB0byBjb21wbGV0ZSAqLworI2RlZmluZSBMSU5LX1VQX1RJTUVPVVQgICAgICAgICAgICAgNTAwCisKKyNkZWZpbmUgRTEwMDBfVFhfQlVGRkVSX1NJWkUgKCh1aW50MzJfdCkxNTE0KQorCisvKiBUaGUgY2FycmllciBleHRlbnNpb24gc3ltYm9sLCBhcyByZWNlaXZlZCBieSB0aGUgTklDLiAqLworI2RlZmluZSBDQVJSSUVSX0VYVEVOU0lPTiAgIDB4MEYKKworLyogVEJJX0FDQ0VQVCBtYWNybyBkZWZpbml0aW9uOgorICoKKyAqIFRoaXMgbWFjcm8gcmVxdWlyZXM6CisgKiAgICAgIGFkYXB0ZXIgPSBhIHBvaW50ZXIgdG8gc3RydWN0IGUxMDAwX2h3IAorICogICAgICBzdGF0dXMgPSB0aGUgOCBiaXQgc3RhdHVzIGZpZWxkIG9mIHRoZSBSWCBkZXNjcmlwdG9yIHdpdGggRU9QIHNldAorICogICAgICBlcnJvciA9IHRoZSA4IGJpdCBlcnJvciBmaWVsZCBvZiB0aGUgUlggZGVzY3JpcHRvciB3aXRoIEVPUCBzZXQKKyAqICAgICAgbGVuZ3RoID0gdGhlIHN1bSBvZiBhbGwgdGhlIGxlbmd0aCBmaWVsZHMgb2YgdGhlIFJYIGRlc2NyaXB0b3JzIHRoYXQKKyAqICAgICAgICAgICAgICAgbWFrZSB1cCB0aGUgY3VycmVudCBmcmFtZQorICogICAgICBsYXN0X2J5dGUgPSB0aGUgbGFzdCBieXRlIG9mIHRoZSBmcmFtZSBETUFlZCBieSB0aGUgaGFyZHdhcmUKKyAqICAgICAgbWF4X2ZyYW1lX2xlbmd0aCA9IHRoZSBtYXhpbXVtIGZyYW1lIGxlbmd0aCB3ZSB3YW50IHRvIGFjY2VwdC4KKyAqICAgICAgbWluX2ZyYW1lX2xlbmd0aCA9IHRoZSBtaW5pbXVtIGZyYW1lIGxlbmd0aCB3ZSB3YW50IHRvIGFjY2VwdC4KKyAqCisgKiBUaGlzIG1hY3JvIGlzIGEgY29uZGl0aW9uYWwgdGhhdCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgaW50ZXJydXB0IAorICogaGFuZGxlcidzIFJ4IHByb2Nlc3Npbmcgcm91dGluZSB3aGVuIFJ4RXJyb3JzIGhhdmUgYmVlbiBkZXRlY3RlZC4KKyAqCisgKiBUeXBpY2FsIHVzZToKKyAqICAuLi4KKyAqICBpZiAoVEJJX0FDQ0VQVCkgeworICogICAgICBhY2NlcHRfZnJhbWUgPSBUUlVFOworICogICAgICBlMTAwMF90YmlfYWRqdXN0X3N0YXRzKGFkYXB0ZXIsIE1hY0FkZHJlc3MpOworICogICAgICBmcmFtZV9sZW5ndGgtLTsKKyAqICB9IGVsc2UgeworICogICAgICBhY2NlcHRfZnJhbWUgPSBGQUxTRTsKKyAqICB9CisgKiAgLi4uCisgKi8KKworI2RlZmluZSBUQklfQUNDRVBUKGFkYXB0ZXIsIHN0YXR1cywgZXJyb3JzLCBsZW5ndGgsIGxhc3RfYnl0ZSkgXAorICAgICgoYWRhcHRlciktPnRiaV9jb21wYXRpYmlsaXR5X29uICYmIFwKKyAgICAgKCgoZXJyb3JzKSAmIEUxMDAwX1JYRF9FUlJfRlJBTUVfRVJSX01BU0spID09IEUxMDAwX1JYRF9FUlJfQ0UpICYmIFwKKyAgICAgKChsYXN0X2J5dGUpID09IENBUlJJRVJfRVhURU5TSU9OKSAmJiBcCisgICAgICgoKHN0YXR1cykgJiBFMTAwMF9SWERfU1RBVF9WUCkgPyBcCisgICAgICAgICAgKCgobGVuZ3RoKSA+ICgoYWRhcHRlciktPm1pbl9mcmFtZV9zaXplIC0gVkxBTl9UQUdfU0laRSkpICYmIFwKKyAgICAgICAgICAgKChsZW5ndGgpIDw9ICgoYWRhcHRlciktPm1heF9mcmFtZV9zaXplICsgMSkpKSA6IFwKKyAgICAgICAgICAoKChsZW5ndGgpID4gKGFkYXB0ZXIpLT5taW5fZnJhbWVfc2l6ZSkgJiYgXAorICAgICAgICAgICAoKGxlbmd0aCkgPD0gKChhZGFwdGVyKS0+bWF4X2ZyYW1lX3NpemUgKyBWTEFOX1RBR19TSVpFICsgMSkpKSkpCisKKy8qIFN0cnVjdHVyZXMsIGVudW1zLCBhbmQgbWFjcm9zIGZvciB0aGUgUEhZICovCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIE1hbmFnZW1lbnQgRGF0YSBJTyAoTURJTykgYW5kIE1hbmFnZW1lbnQgRGF0YQorICogQ2xvY2sgKE1EQykgcGlucyBpbiB0aGUgRGV2aWNlIENvbnRyb2wgUmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9QSFlfUkVTRVRfRElSICBFMTAwMF9DVFJMX1NXRFBJTzAKKyNkZWZpbmUgRTEwMDBfQ1RSTF9QSFlfUkVTRVQgICAgICBFMTAwMF9DVFJMX1NXRFBJTjAKKyNkZWZpbmUgRTEwMDBfQ1RSTF9NRElPX0RJUiAgICAgICBFMTAwMF9DVFJMX1NXRFBJTzIKKyNkZWZpbmUgRTEwMDBfQ1RSTF9NRElPICAgICAgICAgICBFMTAwMF9DVFJMX1NXRFBJTjIKKyNkZWZpbmUgRTEwMDBfQ1RSTF9NRENfRElSICAgICAgICBFMTAwMF9DVFJMX1NXRFBJTzMKKyNkZWZpbmUgRTEwMDBfQ1RSTF9NREMgICAgICAgICAgICBFMTAwMF9DVFJMX1NXRFBJTjMKKyNkZWZpbmUgRTEwMDBfQ1RSTF9QSFlfUkVTRVRfRElSNCBFMTAwMF9DVFJMX0VYVF9TRFA0X0RJUgorI2RlZmluZSBFMTAwMF9DVFJMX1BIWV9SRVNFVDQgICAgIEUxMDAwX0NUUkxfRVhUX1NEUDRfREFUQQorCisvKiBQSFkgMTAwMCBNSUkgUmVnaXN0ZXIvQml0IERlZmluaXRpb25zICovCisvKiBQSFkgUmVnaXN0ZXJzIGRlZmluZWQgYnkgSUVFRSAqLworI2RlZmluZSBQSFlfQ1RSTCAgICAgICAgIDB4MDAJLyogQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBQSFlfU1RBVFVTICAgICAgIDB4MDEJLyogU3RhdHVzIFJlZ2lzZXIgKi8KKyNkZWZpbmUgUEhZX0lEMSAgICAgICAgICAweDAyCS8qIFBoeSBJZCBSZWcgKHdvcmQgMSkgKi8KKyNkZWZpbmUgUEhZX0lEMiAgICAgICAgICAweDAzCS8qIFBoeSBJZCBSZWcgKHdvcmQgMikgKi8KKyNkZWZpbmUgUEhZX0FVVE9ORUdfQURWICAweDA0CS8qIEF1dG9uZWcgQWR2ZXJ0aXNlbWVudCAqLworI2RlZmluZSBQSFlfTFBfQUJJTElUWSAgIDB4MDUJLyogTGluayBQYXJ0bmVyIEFiaWxpdHkgKEJhc2UgUGFnZSkgKi8KKyNkZWZpbmUgUEhZX0FVVE9ORUdfRVhQICAweDA2CS8qIEF1dG9uZWcgRXhwYW5zaW9uIFJlZyAqLworI2RlZmluZSBQSFlfTkVYVF9QQUdFX1RYIDB4MDcJLyogTmV4dCBQYWdlIFRYICovCisjZGVmaW5lIFBIWV9MUF9ORVhUX1BBR0UgMHgwOAkvKiBMaW5rIFBhcnRuZXIgTmV4dCBQYWdlICovCisjZGVmaW5lIFBIWV8xMDAwVF9DVFJMICAgMHgwOQkvKiAxMDAwQmFzZS1UIENvbnRyb2wgUmVnICovCisjZGVmaW5lIFBIWV8xMDAwVF9TVEFUVVMgMHgwQQkvKiAxMDAwQmFzZS1UIFN0YXR1cyBSZWcgKi8KKyNkZWZpbmUgUEhZX0VYVF9TVEFUVVMgICAweDBGCS8qIEV4dGVuZGVkIFN0YXR1cyBSZWcgKi8KKworLyogTTg4RTEwMDAgU3BlY2lmaWMgUmVnaXN0ZXJzICovCisjZGVmaW5lIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwgICAgIDB4MTAJLyogUEhZIFNwZWNpZmljIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTICAgMHgxMQkvKiBQSFkgU3BlY2lmaWMgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE04OEUxMDAwX0lOVF9FTkFCTEUgICAgICAgIDB4MTIJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBNODhFMTAwMF9JTlRfU1RBVFVTICAgICAgICAweDEzCS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwgMHgxNAkvKiBFeHRlbmRlZCBQSFkgU3BlY2lmaWMgQ29udHJvbCAqLworI2RlZmluZSBNODhFMTAwMF9SWF9FUlJfQ05UUiAgICAgICAweDE1CS8qIFJlY2VpdmUgRXJyb3IgQ291bnRlciAqLworCisjZGVmaW5lIE1BWF9QSFlfUkVHX0FERFJFU1MgMHgxRgkvKiA1IGJpdCBhZGRyZXNzIGJ1cyAoMC0weDFGKSAqLworCisvKiBQSFkgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfQ1JfU1BFRURfU0VMRUNUX01TQiAweDAwNDAJLyogYml0cyA2LDEzOiAxMD0xMDAwLCAwMT0xMDAsIDAwPTEwICovCisjZGVmaW5lIE1JSV9DUl9DT0xMX1RFU1RfRU5BQkxFIDB4MDA4MAkvKiBDb2xsaXNpb24gdGVzdCBlbmFibGUgKi8KKyNkZWZpbmUgTUlJX0NSX0ZVTExfRFVQTEVYICAgICAgMHgwMTAwCS8qIEZEWCA9MSwgaGFsZiBkdXBsZXggPTAgKi8KKyNkZWZpbmUgTUlJX0NSX1JFU1RBUlRfQVVUT19ORUcgMHgwMjAwCS8qIFJlc3RhcnQgYXV0byBuZWdvdGlhdGlvbiAqLworI2RlZmluZSBNSUlfQ1JfSVNPTEFURSAgICAgICAgICAweDA0MDAJLyogSXNvbGF0ZSBQSFkgZnJvbSBNSUkgKi8KKyNkZWZpbmUgTUlJX0NSX1BPV0VSX0RPV04gICAgICAgMHgwODAwCS8qIFBvd2VyIGRvd24gKi8KKyNkZWZpbmUgTUlJX0NSX0FVVE9fTkVHX0VOICAgICAgMHgxMDAwCS8qIEF1dG8gTmVnIEVuYWJsZSAqLworI2RlZmluZSBNSUlfQ1JfU1BFRURfU0VMRUNUX0xTQiAweDIwMDAJLyogYml0cyA2LDEzOiAxMD0xMDAwLCAwMT0xMDAsIDAwPTEwICovCisjZGVmaW5lIE1JSV9DUl9MT09QQkFDSyAgICAgICAgIDB4NDAwMAkvKiAwID0gbm9ybWFsLCAxID0gbG9vcGJhY2sgKi8KKyNkZWZpbmUgTUlJX0NSX1JFU0VUICAgICAgICAgICAgMHg4MDAwCS8qIDAgPSBub3JtYWwsIDEgPSBQSFkgcmVzZXQgKi8KKworLyogUEhZIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfU1JfRVhURU5ERURfQ0FQUyAgICAgMHgwMDAxCS8qIEV4dGVuZGVkIHJlZ2lzdGVyIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSBNSUlfU1JfSkFCQkVSX0RFVEVDVCAgICAgMHgwMDAyCS8qIEphYmJlciBEZXRlY3RlZCAqLworI2RlZmluZSBNSUlfU1JfTElOS19TVEFUVVMgICAgICAgMHgwMDA0CS8qIExpbmsgU3RhdHVzIDEgPSBsaW5rICovCisjZGVmaW5lIE1JSV9TUl9BVVRPTkVHX0NBUFMgICAgICAweDAwMDgJLyogQXV0byBOZWcgQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfUkVNT1RFX0ZBVUxUICAgICAgMHgwMDEwCS8qIFJlbW90ZSBGYXVsdCBEZXRlY3QgKi8KKyNkZWZpbmUgTUlJX1NSX0FVVE9ORUdfQ09NUExFVEUgIDB4MDAyMAkvKiBBdXRvIE5lZyBDb21wbGV0ZSAqLworI2RlZmluZSBNSUlfU1JfUFJFQU1CTEVfU1VQUFJFU1MgMHgwMDQwCS8qIFByZWFtYmxlIG1heSBiZSBzdXBwcmVzc2VkICovCisjZGVmaW5lIE1JSV9TUl9FWFRFTkRFRF9TVEFUVVMgICAweDAxMDAJLyogRXh0LiBzdGF0dXMgaW5mbyBpbiBSZWcgMHgwRiAqLworI2RlZmluZSBNSUlfU1JfMTAwVDJfSERfQ0FQUyAgICAgMHgwMjAwCS8qIDEwMFQyIEhhbGYgRHVwbGV4IENhcGFibGUgKi8KKyNkZWZpbmUgTUlJX1NSXzEwMFQyX0ZEX0NBUFMgICAgIDB4MDQwMAkvKiAxMDBUMiBGdWxsIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE1JSV9TUl8xMFRfSERfQ0FQUyAgICAgICAweDA4MDAJLyogMTBUICAgSGFsZiBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfMTBUX0ZEX0NBUFMgICAgICAgMHgxMDAwCS8qIDEwVCAgIEZ1bGwgRHVwbGV4IENhcGFibGUgKi8KKyNkZWZpbmUgTUlJX1NSXzEwMFhfSERfQ0FQUyAgICAgIDB4MjAwMAkvKiAxMDBYICBIYWxmIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE1JSV9TUl8xMDBYX0ZEX0NBUFMgICAgICAweDQwMDAJLyogMTAwWCAgRnVsbCBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBNSUlfU1JfMTAwVDRfQ0FQUyAgICAgICAgMHg4MDAwCS8qIDEwMFQ0IENhcGFibGUgKi8KKworLyogQXV0b25lZyBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyICovCisjZGVmaW5lIE5XQVlfQVJfU0VMRUNUT1JfRklFTEQgMHgwMDAxCS8qIGluZGljYXRlcyBJRUVFIDgwMi4zIENTTUEvQ0QgKi8KKyNkZWZpbmUgTldBWV9BUl8xMFRfSERfQ0FQUyAgICAweDAwMjAJLyogMTBUICAgSGFsZiBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBOV0FZX0FSXzEwVF9GRF9DQVBTICAgIDB4MDA0MAkvKiAxMFQgICBGdWxsIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE5XQVlfQVJfMTAwVFhfSERfQ0FQUyAgMHgwMDgwCS8qIDEwMFRYIEhhbGYgRHVwbGV4IENhcGFibGUgKi8KKyNkZWZpbmUgTldBWV9BUl8xMDBUWF9GRF9DQVBTICAweDAxMDAJLyogMTAwVFggRnVsbCBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBOV0FZX0FSXzEwMFQ0X0NBUFMgICAgIDB4MDIwMAkvKiAxMDBUNCBDYXBhYmxlICovCisjZGVmaW5lIE5XQVlfQVJfUEFVU0UgICAgICAgICAgMHgwNDAwCS8qIFBhdXNlIG9wZXJhdGlvbiBkZXNpcmVkICovCisjZGVmaW5lIE5XQVlfQVJfQVNNX0RJUiAgICAgICAgMHgwODAwCS8qIEFzeW1tZXRyaWMgUGF1c2UgRGlyZWN0aW9uIGJpdCAqLworI2RlZmluZSBOV0FZX0FSX1JFTU9URV9GQVVMVCAgIDB4MjAwMAkvKiBSZW1vdGUgRmF1bHQgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgTldBWV9BUl9ORVhUX1BBR0UgICAgICAweDgwMDAJLyogTmV4dCBQYWdlIGFiaWxpdHkgc3VwcG9ydGVkICovCisKKy8qIExpbmsgUGFydG5lciBBYmlsaXR5IFJlZ2lzdGVyIChCYXNlIFBhZ2UpICovCisjZGVmaW5lIE5XQVlfTFBBUl9TRUxFQ1RPUl9GSUVMRCAweDAwMDAJLyogTFAgcHJvdG9jb2wgc2VsZWN0b3IgZmllbGQgKi8KKyNkZWZpbmUgTldBWV9MUEFSXzEwVF9IRF9DQVBTICAgIDB4MDAyMAkvKiBMUCBpcyAxMFQgICBIYWxmIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE5XQVlfTFBBUl8xMFRfRkRfQ0FQUyAgICAweDAwNDAJLyogTFAgaXMgMTBUICAgRnVsbCBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBOV0FZX0xQQVJfMTAwVFhfSERfQ0FQUyAgMHgwMDgwCS8qIExQIGlzIDEwMFRYIEhhbGYgRHVwbGV4IENhcGFibGUgKi8KKyNkZWZpbmUgTldBWV9MUEFSXzEwMFRYX0ZEX0NBUFMgIDB4MDEwMAkvKiBMUCBpcyAxMDBUWCBGdWxsIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE5XQVlfTFBBUl8xMDBUNF9DQVBTICAgICAweDAyMDAJLyogTFAgaXMgMTAwVDQgQ2FwYWJsZSAqLworI2RlZmluZSBOV0FZX0xQQVJfUEFVU0UgICAgICAgICAgMHgwNDAwCS8qIExQIFBhdXNlIG9wZXJhdGlvbiBkZXNpcmVkICovCisjZGVmaW5lIE5XQVlfTFBBUl9BU01fRElSICAgICAgICAweDA4MDAJLyogTFAgQXN5bW1ldHJpYyBQYXVzZSBEaXJlY3Rpb24gYml0ICovCisjZGVmaW5lIE5XQVlfTFBBUl9SRU1PVEVfRkFVTFQgICAweDIwMDAJLyogTFAgaGFzIGRldGVjdGVkIFJlbW90ZSBGYXVsdCAqLworI2RlZmluZSBOV0FZX0xQQVJfQUNLTk9XTEVER0UgICAgMHg0MDAwCS8qIExQIGhhcyByeCdkIGxpbmsgY29kZSB3b3JkICovCisjZGVmaW5lIE5XQVlfTFBBUl9ORVhUX1BBR0UgICAgICAweDgwMDAJLyogTmV4dCBQYWdlIGFiaWxpdHkgc3VwcG9ydGVkICovCisKKy8qIEF1dG9uZWcgRXhwYW5zaW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE5XQVlfRVJfTFBfTldBWV9DQVBTICAgICAgMHgwMDAxCS8qIExQIGhhcyBBdXRvIE5lZyBDYXBhYmlsaXR5ICovCisjZGVmaW5lIE5XQVlfRVJfUEFHRV9SWEQgICAgICAgICAgMHgwMDAyCS8qIExQIGlzIDEwVCAgIEhhbGYgRHVwbGV4IENhcGFibGUgKi8KKyNkZWZpbmUgTldBWV9FUl9ORVhUX1BBR0VfQ0FQUyAgICAweDAwMDQJLyogTFAgaXMgMTBUICAgRnVsbCBEdXBsZXggQ2FwYWJsZSAqLworI2RlZmluZSBOV0FZX0VSX0xQX05FWFRfUEFHRV9DQVBTIDB4MDAwOAkvKiBMUCBpcyAxMDBUWCBIYWxmIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE5XQVlfRVJfUEFSX0RFVEVDVF9GQVVMVCAgMHgwMTAwCS8qIExQIGlzIDEwMFRYIEZ1bGwgRHVwbGV4IENhcGFibGUgKi8KKworLyogTmV4dCBQYWdlIFRYIFJlZ2lzdGVyICovCisjZGVmaW5lIE5QVFhfTVNHX0NPREVfRklFTEQgMHgwMDAxCS8qIE5QIG1zZyBjb2RlIG9yIHVuZm9ybWF0dGVkIGRhdGEgKi8KKyNkZWZpbmUgTlBUWF9UT0dHTEUgICAgICAgICAweDA4MDAJLyogVG9nZ2xlcyBiZXR3ZWVuIGV4Y2hhbmdlcworCQkJCQkgKiBvZiBkaWZmZXJlbnQgTlAKKwkJCQkJICovCisjZGVmaW5lIE5QVFhfQUNLTk9XTERHRTIgICAgMHgxMDAwCS8qIDEgPSB3aWxsIGNvbXBseSB3aXRoIG1zZworCQkJCQkgKiAwID0gY2Fubm90IGNvbXBseSB3aXRoIG1zZworCQkJCQkgKi8KKyNkZWZpbmUgTlBUWF9NU0dfUEFHRSAgICAgICAweDIwMDAJLyogZm9ybWF0dGVkKDEpL3VuZm9ybWF0dGVkKDApIHBnICovCisjZGVmaW5lIE5QVFhfTkVYVF9QQUdFICAgICAgMHg4MDAwCS8qIDEgPSBhZGRpdGlvbiBOUCB3aWxsIGZvbGxvdyAKKwkJCQkJICogMCA9IHNlbmRpbmcgbGFzdCBOUAorCQkJCQkgKi8KKworLyogTGluayBQYXJ0bmVyIE5leHQgUGFnZSBSZWdpc3RlciAqLworI2RlZmluZSBMUF9STlBSX01TR19DT0RFX0ZJRUxEIDB4MDAwMQkvKiBOUCBtc2cgY29kZSBvciB1bmZvcm1hdHRlZCBkYXRhICovCisjZGVmaW5lIExQX1JOUFJfVE9HR0xFICAgICAgICAgMHgwODAwCS8qIFRvZ2dsZXMgYmV0d2VlbiBleGNoYW5nZXMKKwkJCQkJICogb2YgZGlmZmVyZW50IE5QCisJCQkJCSAqLworI2RlZmluZSBMUF9STlBSX0FDS05PV0xER0UyICAgIDB4MTAwMAkvKiAxID0gd2lsbCBjb21wbHkgd2l0aCBtc2cgCisJCQkJCSAqIDAgPSBjYW5ub3QgY29tcGx5IHdpdGggbXNnCisJCQkJCSAqLworI2RlZmluZSBMUF9STlBSX01TR19QQUdFICAgICAgIDB4MjAwMAkvKiBmb3JtYXR0ZWQoMSkvdW5mb3JtYXR0ZWQoMCkgcGcgKi8KKyNkZWZpbmUgTFBfUk5QUl9BQ0tOT1dMREdFICAgICAweDQwMDAJLyogMSA9IEFDSyAvIDAgPSBOTyBBQ0sgKi8KKyNkZWZpbmUgTFBfUk5QUl9ORVhUX1BBR0UgICAgICAweDgwMDAJLyogMSA9IGFkZGl0aW9uIE5QIHdpbGwgZm9sbG93CisJCQkJCSAqIDAgPSBzZW5kaW5nIGxhc3QgTlAgCisJCQkJCSAqLworCisvKiAxMDAwQkFTRS1UIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ1JfMTAwMFRfQVNZTV9QQVVTRSAgICAgIDB4MDA4MAkvKiBBZHZlcnRpc2UgYXN5bW1ldHJpYyBwYXVzZSBiaXQgKi8KKyNkZWZpbmUgQ1JfMTAwMFRfSERfQ0FQUyAgICAgICAgIDB4MDEwMAkvKiBBZHZlcnRpc2UgMTAwMFQgSEQgY2FwYWJpbGl0eSAqLworI2RlZmluZSBDUl8xMDAwVF9GRF9DQVBTICAgICAgICAgMHgwMjAwCS8qIEFkdmVydGlzZSAxMDAwVCBGRCBjYXBhYmlsaXR5ICAqLworI2RlZmluZSBDUl8xMDAwVF9SRVBFQVRFUl9EVEUgICAgMHgwNDAwCS8qIDE9UmVwZWF0ZXIvc3dpdGNoIGRldmljZSBwb3J0ICovCisJCQkJCS8qIDA9RFRFIGRldmljZSAqLworI2RlZmluZSBDUl8xMDAwVF9NU19WQUxVRSAgICAgICAgMHgwODAwCS8qIDE9Q29uZmlndXJlIFBIWSBhcyBNYXN0ZXIgKi8KKwkJCQkJLyogMD1Db25maWd1cmUgUEhZIGFzIFNsYXZlICovCisjZGVmaW5lIENSXzEwMDBUX01TX0VOQUJMRSAgICAgICAweDEwMDAJLyogMT1NYXN0ZXIvU2xhdmUgbWFudWFsIGNvbmZpZyB2YWx1ZSAqLworCQkJCQkvKiAwPUF1dG9tYXRpYyBNYXN0ZXIvU2xhdmUgY29uZmlnICovCisjZGVmaW5lIENSXzEwMDBUX1RFU1RfTU9ERV9OT1JNQUwgMHgwMDAwCS8qIE5vcm1hbCBPcGVyYXRpb24gKi8KKyNkZWZpbmUgQ1JfMTAwMFRfVEVTVF9NT0RFXzEgICAgIDB4MjAwMAkvKiBUcmFuc21pdCBXYXZlZm9ybSB0ZXN0ICovCisjZGVmaW5lIENSXzEwMDBUX1RFU1RfTU9ERV8yICAgICAweDQwMDAJLyogTWFzdGVyIFRyYW5zbWl0IEppdHRlciB0ZXN0ICovCisjZGVmaW5lIENSXzEwMDBUX1RFU1RfTU9ERV8zICAgICAweDYwMDAJLyogU2xhdmUgVHJhbnNtaXQgSml0dGVyIHRlc3QgKi8KKyNkZWZpbmUgQ1JfMTAwMFRfVEVTVF9NT0RFXzQgICAgIDB4ODAwMAkvKiBUcmFuc21pdHRlciBEaXN0b3J0aW9uIHRlc3QgKi8KKworLyogMTAwMEJBU0UtVCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1JfMTAwMFRfSURMRV9FUlJPUl9DTlQgICAweDAwRkYJLyogTnVtIGlkbGUgZXJyb3JzIHNpbmNlIGxhc3QgcmVhZCAqLworI2RlZmluZSBTUl8xMDAwVF9BU1lNX1BBVVNFX0RJUiAgIDB4MDEwMAkvKiBMUCBhc3ltbWV0cmljIHBhdXNlIGRpcmVjdGlvbiBiaXQgKi8KKyNkZWZpbmUgU1JfMTAwMFRfTFBfSERfQ0FQUyAgICAgICAweDA0MDAJLyogTFAgaXMgMTAwMFQgSEQgY2FwYWJsZSAqLworI2RlZmluZSBTUl8xMDAwVF9MUF9GRF9DQVBTICAgICAgIDB4MDgwMAkvKiBMUCBpcyAxMDAwVCBGRCBjYXBhYmxlICovCisjZGVmaW5lIFNSXzEwMDBUX1JFTU9URV9SWF9TVEFUVVMgMHgxMDAwCS8qIFJlbW90ZSByZWNlaXZlciBPSyAqLworI2RlZmluZSBTUl8xMDAwVF9MT0NBTF9SWF9TVEFUVVMgIDB4MjAwMAkvKiBMb2NhbCByZWNlaXZlciBPSyAqLworI2RlZmluZSBTUl8xMDAwVF9NU19DT05GSUdfUkVTICAgIDB4NDAwMAkvKiAxPUxvY2FsIFRYIGlzIE1hc3RlciwgMD1TbGF2ZSAqLworI2RlZmluZSBTUl8xMDAwVF9NU19DT05GSUdfRkFVTFQgIDB4ODAwMAkvKiBNYXN0ZXIvU2xhdmUgY29uZmlnIGZhdWx0ICovCisjZGVmaW5lIFNSXzEwMDBUX1JFTU9URV9SWF9TVEFUVVNfU0hJRlQgMTIKKyNkZWZpbmUgU1JfMTAwMFRfTE9DQUxfUlhfU1RBVFVTX1NISUZUICAxMworCisvKiBFeHRlbmRlZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUVFRV9FU1JfMTAwMFRfSERfQ0FQUyAweDEwMDAJLyogMTAwMFQgSEQgY2FwYWJsZSAqLworI2RlZmluZSBJRUVFX0VTUl8xMDAwVF9GRF9DQVBTIDB4MjAwMAkvKiAxMDAwVCBGRCBjYXBhYmxlICovCisjZGVmaW5lIElFRUVfRVNSXzEwMDBYX0hEX0NBUFMgMHg0MDAwCS8qIDEwMDBYIEhEIGNhcGFibGUgKi8KKyNkZWZpbmUgSUVFRV9FU1JfMTAwMFhfRkRfQ0FQUyAweDgwMDAJLyogMTAwMFggRkQgY2FwYWJsZSAqLworCisjZGVmaW5lIFBIWV9UWF9QT0xBUklUWV9NQVNLICAgMHgwMTAwCS8qIHJlZ2lzdGVyIDEwaCBiaXQgOCAocG9sYXJpdHkgYml0KSAqLworI2RlZmluZSBQSFlfVFhfTk9STUFMX1BPTEFSSVRZIDAJLyogcmVnaXN0ZXIgMTBoIGJpdCA4IChub3JtYWwgcG9sYXJpdHkpICovCisKKyNkZWZpbmUgQVVUT19QT0xBUklUWV9ESVNBQkxFICAweDAwMTAJLyogcmVnaXN0ZXIgMTFoIGJpdCA0ICovCisJCQkJICAgICAgLyogKDA9ZW5hYmxlLCAxPWRpc2FibGUpICovCisKKy8qIE04OEUxMDAwIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE04OEUxMDAwX1BTQ1JfSkFCQkVSX0RJU0FCTEUgICAgMHgwMDAxCS8qIDE9SmFiYmVyIEZ1bmN0aW9uIGRpc2FibGVkICovCisjZGVmaW5lIE04OEUxMDAwX1BTQ1JfUE9MQVJJVFlfUkVWRVJTQUwgMHgwMDAyCS8qIDE9UG9sYXJpdHkgUmV2ZXJzYWwgZW5hYmxlZCAqLworI2RlZmluZSBNODhFMTAwMF9QU0NSX1NRRV9URVNUICAgICAgICAgIDB4MDAwNAkvKiAxPVNRRSBUZXN0IGVuYWJsZWQgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNDUl9DTEsxMjVfRElTQUJMRSAgICAweDAwMTAJLyogMT1DTEsxMjUgbG93LCAKKwkJCQkJCSAqIDA9Q0xLMTI1IHRvZ2dsaW5nCisJCQkJCQkgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNDUl9NRElfTUFOVUFMX01PREUgIDB4MDAwMAkvKiBNREkgQ3Jvc3NvdmVyIE1vZGUgYml0cyA2OjUgKi8KKwkJCQkJICAgICAgIC8qIE1hbnVhbCBNREkgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBNODhFMTAwMF9QU0NSX01ESVhfTUFOVUFMX01PREUgMHgwMDIwCS8qIE1hbnVhbCBNRElYIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNDUl9BVVRPX1hfMTAwMFQgICAgIDB4MDA0MAkvKiAxMDAwQkFTRS1UOiBBdXRvIGNyb3Nzb3ZlciwKKwkJCQkJCSAqICAxMDBCQVNFLVRYLzEwQkFTRS1UOiAKKwkJCQkJCSAqICBNREkgTW9kZQorCQkJCQkJICovCisjZGVmaW5lIE04OEUxMDAwX1BTQ1JfQVVUT19YX01PREUgICAgICAweDAwNjAJLyogQXV0byBjcm9zc292ZXIgZW5hYmxlZCAKKwkJCQkJCSAqIGFsbCBzcGVlZHMuIAorCQkJCQkJICovCisjZGVmaW5lIE04OEUxMDAwX1BTQ1JfMTBCVF9FWFRfRElTVF9FTkFCTEUgMHgwMDgwCisJCQkJCS8qIDE9RW5hYmxlIEV4dGVuZGVkIDEwQkFTRS1UIGRpc3RhbmNlCisJCQkJCSAqIChMb3dlciAxMEJBU0UtVCBSWCBUaHJlc2hvbGQpCisJCQkJCSAqIDA9Tm9ybWFsIDEwQkFTRS1UIFJYIFRocmVzaG9sZCAqLworI2RlZmluZSBNODhFMTAwMF9QU0NSX01JSV81QklUX0VOQUJMRSAgICAgIDB4MDEwMAorCQkJCQkvKiAxPTUtQml0IGludGVyZmFjZSBpbiAxMDBCQVNFLVRYCisJCQkJCSAqIDA9TUlJIGludGVyZmFjZSBpbiAxMDBCQVNFLVRYICovCisjZGVmaW5lIE04OEUxMDAwX1BTQ1JfU0NSQU1CTEVSX0RJU0FCTEUgICAgMHgwMjAwCS8qIDE9U2NyYW1ibGVyIGRpc2FibGUgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNDUl9GT1JDRV9MSU5LX0dPT0QgICAgICAweDA0MDAJLyogMT1Gb3JjZSBsaW5rIGdvb2QgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNDUl9BU1NFUlRfQ1JTX09OX1RYICAgICAweDA4MDAJLyogMT1Bc3NlcnQgQ1JTIG9uIFRyYW5zbWl0ICovCisKKyNkZWZpbmUgTTg4RTEwMDBfUFNDUl9QT0xBUklUWV9SRVZFUlNBTF9TSElGVCAgICAxCisjZGVmaW5lIE04OEUxMDAwX1BTQ1JfQVVUT19YX01PREVfU0hJRlQgICAgICAgICAgNQorI2RlZmluZSBNODhFMTAwMF9QU0NSXzEwQlRfRVhUX0RJU1RfRU5BQkxFX1NISUZUIDcKKworLyogTTg4RTEwMDAgUEhZIFNwZWNpZmljIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNODhFMTAwMF9QU1NSX0pBQkJFUiAgICAgICAgICAgICAweDAwMDEJLyogMT1KYWJiZXIgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNTUl9SRVZfUE9MQVJJVFkgICAgICAgMHgwMDAyCS8qIDE9UG9sYXJpdHkgcmV2ZXJzZWQgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNTUl9NRElYICAgICAgICAgICAgICAgMHgwMDQwCS8qIDE9TURJWDsgMD1NREkgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNTUl9DQUJMRV9MRU5HVEggICAgICAgMHgwMzgwCS8qIDA9PDUwTTsxPTUwLTgwTTsyPTgwLTExME07CisJCQkJCQkgICAqIDM9MTEwLTE0ME07ND0+MTQwTSAqLworI2RlZmluZSBNODhFMTAwMF9QU1NSX0xJTksgICAgICAgICAgICAgICAweDA0MDAJLyogMT1MaW5rIHVwLCAwPUxpbmsgZG93biAqLworI2RlZmluZSBNODhFMTAwMF9QU1NSX1NQRF9EUExYX1JFU09MVkVEICAweDA4MDAJLyogMT1TcGVlZCAmIER1cGxleCByZXNvbHZlZCAqLworI2RlZmluZSBNODhFMTAwMF9QU1NSX1BBR0VfUkNWRCAgICAgICAgICAweDEwMDAJLyogMT1QYWdlIHJlY2VpdmVkICovCisjZGVmaW5lIE04OEUxMDAwX1BTU1JfRFBMWCAgICAgICAgICAgICAgIDB4MjAwMAkvKiAxPUR1cGxleCAwPUhhbGYgRHVwbGV4ICovCisjZGVmaW5lIE04OEUxMDAwX1BTU1JfU1BFRUQgICAgICAgICAgICAgIDB4QzAwMAkvKiBTcGVlZCwgYml0cyAxNDoxNSAqLworI2RlZmluZSBNODhFMTAwMF9QU1NSXzEwTUJTICAgICAgICAgICAgICAweDAwMDAJLyogMDA9MTBNYnMgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNTUl8xMDBNQlMgICAgICAgICAgICAgMHg0MDAwCS8qIDAxPTEwME1icyAqLworI2RlZmluZSBNODhFMTAwMF9QU1NSXzEwMDBNQlMgICAgICAgICAgICAweDgwMDAJLyogMTA9MTAwME1icyAqLworCisjZGVmaW5lIE04OEUxMDAwX1BTU1JfUkVWX1BPTEFSSVRZX1NISUZUIDEKKyNkZWZpbmUgTTg4RTEwMDBfUFNTUl9NRElYX1NISUZUICAgICAgICAgNgorI2RlZmluZSBNODhFMTAwMF9QU1NSX0NBQkxFX0xFTkdUSF9TSElGVCA3CisKKy8qIE04OEUxMDAwIEV4dGVuZGVkIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE04OEUxMDAwX0VQU0NSX0ZJQkVSX0xPT1BCQUNLIDB4NDAwMAkvKiAxPUZpYmVyIGxvb3BiYWNrICovCisjZGVmaW5lIE04OEUxMDAwX0VQU0NSX0RPV05fTk9fSURMRSAgIDB4ODAwMAkvKiAxPUxvc3QgbG9jayBkZXRlY3QgZW5hYmxlZC4KKwkJCQkJCSAqIFdpbGwgYXNzZXJ0IGxvc3QgbG9jayBhbmQgYnJpbmcKKwkJCQkJCSAqIGxpbmsgZG93biBpZiBpZGxlIG5vdCBzZWVuCisJCQkJCQkgKiB3aXRoaW4gMW1zIGluIDEwMDBCQVNFLVQgCisJCQkJCQkgKi8KKy8qIE51bWJlciBvZiB0aW1lcyB3ZSB3aWxsIGF0dGVtcHQgdG8gYXV0b25lZ290aWF0ZSBiZWZvcmUgZG93bnNoaWZ0aW5nIGlmIHdlCisgKiBhcmUgdGhlIG1hc3RlciAqLworI2RlZmluZSBNODhFMTAwMF9FUFNDUl9NQVNURVJfRE9XTlNISUZUX01BU0sgMHgwQzAwCisjZGVmaW5lIE04OEUxMDAwX0VQU0NSX01BU1RFUl9ET1dOU0hJRlRfMVggICAweDAwMDAKKyNkZWZpbmUgTTg4RTEwMDBfRVBTQ1JfTUFTVEVSX0RPV05TSElGVF8yWCAgIDB4MDQwMAorI2RlZmluZSBNODhFMTAwMF9FUFNDUl9NQVNURVJfRE9XTlNISUZUXzNYICAgMHgwODAwCisjZGVmaW5lIE04OEUxMDAwX0VQU0NSX01BU1RFUl9ET1dOU0hJRlRfNFggICAweDBDMDAKKy8qIE51bWJlciBvZiB0aW1lcyB3ZSB3aWxsIGF0dGVtcHQgdG8gYXV0b25lZ290aWF0ZSBiZWZvcmUgZG93bnNoaWZ0aW5nIGlmIHdlCisgKiBhcmUgdGhlIHNsYXZlICovCisjZGVmaW5lIE04OEUxMDAwX0VQU0NSX1NMQVZFX0RPV05TSElGVF9NQVNLICAweDAzMDAKKyNkZWZpbmUgTTg4RTEwMDBfRVBTQ1JfU0xBVkVfRE9XTlNISUZUX0RJUyAgIDB4MDAwMAorI2RlZmluZSBNODhFMTAwMF9FUFNDUl9TTEFWRV9ET1dOU0hJRlRfMVggICAgMHgwMTAwCisjZGVmaW5lIE04OEUxMDAwX0VQU0NSX1NMQVZFX0RPV05TSElGVF8yWCAgICAweDAyMDAKKyNkZWZpbmUgTTg4RTEwMDBfRVBTQ1JfU0xBVkVfRE9XTlNISUZUXzNYICAgIDB4MDMwMAorI2RlZmluZSBNODhFMTAwMF9FUFNDUl9UWF9DTEtfMl81ICAgICAweDAwNjAJLyogMi41IE1IeiBUWF9DTEsgKi8KKyNkZWZpbmUgTTg4RTEwMDBfRVBTQ1JfVFhfQ0xLXzI1ICAgICAgMHgwMDcwCS8qIDI1ICBNSHogVFhfQ0xLICovCisjZGVmaW5lIE04OEUxMDAwX0VQU0NSX1RYX0NMS18wICAgICAgIDB4MDAwMAkvKiBOTyAgVFhfQ0xLICovCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgdmFsaWQgUEhZIElEcy4gKi8KKyNkZWZpbmUgTTg4RTEwMDBfRV9QSFlfSUQgIDB4MDE0MTBDNTAKKyNkZWZpbmUgTTg4RTEwMDBfSV9QSFlfSUQgIDB4MDE0MTBDMzAKKyNkZWZpbmUgTTg4RTEwMTFfSV9QSFlfSUQgIDB4MDE0MTBDMjAKKyNkZWZpbmUgTTg4RTEwMDBfMTJfUEhZX0lEIE04OEUxMDAwX0VfUEhZX0lECisjZGVmaW5lIE04OEUxMDAwXzE0X1BIWV9JRCBNODhFMTAwMF9FX1BIWV9JRAorCisvKiBNaXNjZWxsYW5lb3VzIFBIWSBiaXQgZGVmaW5pdGlvbnMuICovCisjZGVmaW5lIFBIWV9QUkVBTUJMRSAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBQSFlfU09GICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUEhZX09QX1JFQUQgICAgICAgICAweDAyCisjZGVmaW5lIFBIWV9PUF9XUklURSAgICAgICAgMHgwMQorI2RlZmluZSBQSFlfVFVSTkFST1VORCAgICAgIDB4MDIKKyNkZWZpbmUgUEhZX1BSRUFNQkxFX1NJWkUgICAzMgorI2RlZmluZSBNSUlfQ1JfU1BFRURfMTAwMCAgIDB4MDA0MAorI2RlZmluZSBNSUlfQ1JfU1BFRURfMTAwICAgIDB4MjAwMAorI2RlZmluZSBNSUlfQ1JfU1BFRURfMTAgICAgIDB4MDAwMAorI2RlZmluZSBFMTAwMF9QSFlfQUREUkVTUyAgIDB4MDEKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX1RJTUUgICA0NQkvKiA0LjUgU2Vjb25kcyAqLworI2RlZmluZSBQSFlfRk9SQ0VfVElNRSAgICAgIDIwCS8qIDIuMCBTZWNvbmRzICovCisjZGVmaW5lIFBIWV9SRVZJU0lPTl9NQVNLICAgMHhGRkZGRkZGMAorI2RlZmluZSBERVZJQ0VfU1BFRURfTUFTSyAgIDB4MDAwMDAzMDAJLyogRGV2aWNlIEN0cmwgUmVnIFNwZWVkIE1hc2sgKi8KKyNkZWZpbmUgUkVHNF9TUEVFRF9NQVNLICAgICAweDAxRTAKKyNkZWZpbmUgUkVHOV9TUEVFRF9NQVNLICAgICAweDAzMDAKKyNkZWZpbmUgQURWRVJUSVNFXzEwX0hBTEYgICAweDAwMDEKKyNkZWZpbmUgQURWRVJUSVNFXzEwX0ZVTEwgICAweDAwMDIKKyNkZWZpbmUgQURWRVJUSVNFXzEwMF9IQUxGICAweDAwMDQKKyNkZWZpbmUgQURWRVJUSVNFXzEwMF9GVUxMICAweDAwMDgKKyNkZWZpbmUgQURWRVJUSVNFXzEwMDBfSEFMRiAweDAwMTAKKyNkZWZpbmUgQURWRVJUSVNFXzEwMDBfRlVMTCAweDAwMjAKKyNkZWZpbmUgQVVUT05FR19BRFZFUlRJU0VfU1BFRURfREVGQVVMVCAweDAwMkYJLyogRXZlcnl0aGluZyBidXQgMTAwMC1IYWxmICovCisKKyNlbmRpZgkJCQkvKiBfRTEwMDBfSFdfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbXByb2MuaCBiL2luY2x1ZGUvY29tbXByb2MuaAppbmRleCBlOWIwYWI3Li5kNmNmOWJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1wcm9jLmgKKysrIGIvaW5jbHVkZS9jb21tcHJvYy5oCkBAIC0xMzMxLDYgKzEzMzEsNyBAQAogCiAjaWYgKGRlZmluZWQoQ09ORklHX01WUykgJiYgQ09ORklHX01WUyA8IDIpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19SMzYwTVBJKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfUkJDODIzKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfVFFNODIzTCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX1RRTTg1MEwpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19FVFgwOTQpICB8fCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvRkFEUzgyMy5oIGIvaW5jbHVkZS9jb25maWdzL0ZBRFM4MjMuaAppbmRleCA1OGQzM2M3Li5hY2IyZWVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvRkFEUzgyMy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9GQURTODIzLmgKQEAgLTU4LDcgKzU4LDcgQEAKIAogLyogV2lyZWxlc3MgNTZLaHogNFBQTSBrZXlib2FyZCBvbiBTTUN4ICovCiAKLS8qI2RlZmluZSBDT05GSUdfV0xfNFBQTV9LRVlCT0FSRAkJMSAqLworLyojZGVmaW5lIENPTkZJR19LRVlCT0FSRAkJMSAqLwogI2RlZmluZSBDT05GSUdfV0xfNFBQTV9LRVlCT0FSRF9TTUMJMAkvKiBTTUMgdG8gdXNlICgwIGluZGV4ZWQpICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvR0VOSUVUVi5oIGIvaW5jbHVkZS9jb25maWdzL0dFTklFVFYuaAppbmRleCA5OWUyY2ZjLi5lZjJjYjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvR0VOSUVUVi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9HRU5JRVRWLmgKQEAgLTYzLDcgKzYzLDcgQEAKIAogLyogV2lyZWxlc3MgNTZLaHogNFBQTSBrZXlib2FyZCBvbiBTTUN4ICovCiAKLS8qI2RlZmluZSBDT05GSUdfV0xfNFBQTV9LRVlCT0FSRAkJMCAqLworLyojZGVmaW5lIENPTkZJR19LRVlCT0FSRAkJMCAqLwogLyojZGVmaW5lIENPTkZJR19XTF80UFBNX0tFWUJPQVJEX1NNQwkwCS8gIFNNQyB0byB1c2UgKDAgaW5kZXhlZCkgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9LVVA0Sy5oIGIvaW5jbHVkZS9jb25maWdzL0tVUDRLLmgKaW5kZXggZjY4ZjFlMS4uYjkyNGI5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0tVUDRLLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0tVUDRLLmgKQEAgLTQxLDM5ICs0MSw0MSBAQAogI2RlZmluZQlDT05GSUdfOHh4X0NPTlNfU01DMQkxCS8qIENvbnNvbGUgaXMgb24gU01DMQkJKi8KICN1bmRlZglDT05GSUdfOHh4X0NPTlNfU01DMgogI3VuZGVmCUNPTkZJR184eHhfQ09OU19OT05FCi0jZGVmaW5lIENPTkZJR19CQVVEUkFURQkJOTYwMAkvKiBjb25zb2xlIGJhdWRyYXRlCQkqLworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAkvKiBjb25zb2xlIGJhdWRyYXRlCQkqLwogI2lmIDAKICNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQktMQkvKiBhdXRvYm9vdCBkaXNhYmxlZAkJKi8KICNlbHNlCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciAxIHNlY29uZAkqLworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTEJLyogYXV0b2Jvb3QgYWZ0ZXIgMSBzZWNvbmQJKi8KICNlbmRpZgogCiAjZGVmaW5lCUNPTkZJR19DTE9DS1NfSU5fTUhaCTEJLyogY2xvY2tzIHBhc3NzZWQgdG8gTGludXggaW4gTUh6ICovCiAKICNkZWZpbmUgQ09ORklHX0JPQVJEX1RZUEVTCTEJLyogc3VwcG9ydCBib2FyZCB0eXBlcwkJKi8KIAotI2lmIDAKLSNkZWZpbmUgQ09ORklHX1BSRUJPT1QJImVjaG87ZWNobyBUeXBlIFwicnVuIGZsYXNoX25mc1wiIHRvIG1vdW50IHJvb3QgZmlsZXN5c3RlbSBvdmVyIE5GUztlY2hvIgotI2VuZGlmCiAKICN1bmRlZglDT05GSUdfQk9PVEFSR1MKIAorCi0jZGVmaW5lIENPTkZJR19ORlNCT09UQ09NTUFORCBcCi0gICAgImRoY3AgOyJcCi0JInNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJvIG5mc3Jvb3Q9JChuZnNpcCk6JChyb290cGF0aCkgIlwKLQkiaXA9JChpcGFkZHIpOiQobmZzaXApOiQoZ2F0ZXdheWlwKToiXAotCSIkKG5ldG1hc2spOmhleWRlY2suZXZhOmV0aDA6b2ZmOyAiXAotICAgICJib290bSAxMDAwMDAiCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJCSAgXAorInNsb3RfYV9ib290PXNldGVudiBib290YXJncyByb290PS9kZXYvaGRhMiBpcD1vZmYgcGFuaWM9MTtcCisgZGlza2Jvb3QgMjAwMDAwIDA6MTsgYm9vdG0gMjAwMDAwXDAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyJzbG90X2JfYm9vdD1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L2hkYTIgaXA9b2ZmIHBhbmljPTE7XAorIGRpc2tib290IDIwMDAwMCAyOjE7IGJvb3RtIDIwMDAwMFwwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisibmZzX2Jvb3Q9ZGhjcDsgcnVuIG5mc2FyZ3MgYWRkaXA7IGJvb3RtIDIwMDAwMFwwIiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyJwYW5pY19ib290PWVjaG8gTm8gQm9vdGRldmljZSAhISEgcmVzZXRcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0kKG5mc2lwKTokKHJvb3RwYXRoKVwwIiBcCisicmFtYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSByd1wwIgkJCSAgICAgICAgICBcCisiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICQoYm9vdGFyZ3MpIGlwPSQoaXBhZGRyKTokKG5mc2lwKTokKGdhdGV3YXlpcClcCis6JChuZXRtYXNrKTokKGhvc3RuYW1lKTokKG5ldGRldik6b2ZmIHBhbmljPTFcMCIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyJuZXRkZXY9ZXRoMFwwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorImxvYWQ9dGZ0cCAyMDAwMDAgYm9vdGxvYWRlci5iaXRtYXA7dGZ0cCAxMDAwMDAgdS1ib290LmJpblwwIiAgICAgICAgICAgICBcCisidXBkYXRlPXByb3RlY3Qgb2ZmIDE6MC04O2VyYSAxOjAtODtjcC5iIDEwMDAwMCA0MDAwMDAwMCAkKGZpbGVzaXplKTtcCitjcC5iIDIwMDAwMCA0MDA0MDAwMCAxNDAwMFwwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyJuZnNpcD0xOTIuMTY4LjIuMTlcMCIKIAotI2RlZmluZSBDT05GSUdfUkFNQk9PVENPTU1BTkQJXAotICAgICJkaXNrYm9vdCAxMDAwMDAgMDoxOyAiXAotICAgICJzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L2hkYTIgcGFuaWM9MSAiXAotCSJpcD0xOTIuMTY4LjAuNzE6MTkyLjE2OC4wLjEwMDoxOTIuMTY4LjAuMjoyNTUuMjU1LjI1NS4wOyAiXAotICAgICJib290bSIKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5EICBcCisgICAgInJ1biBzbG90X2FfYm9vdDtydW4gc2xvdF9iX2Jvb3Q7cnVuIG5mc19ib290O3J1biBwYW5pY19ib290IgogCi0jZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAlcCi0gICAgInJ1biByYW1ib290ICJcCi0gICAgInJ1biBuZnNib290IgogCiAjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUiAgMQogCkBAIC0xMjQsMTIgKzEyNiwxNCBAQAogI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDA0MDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbgkqLwogI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCTB4MEMwMDAwMAkvKiA0IC4uLiAxMiBNQiBpbiBEUkFNCSovCiAKLSNkZWZpbmUJQ0ZHX0xPQURfQUREUgkJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KKyNkZWZpbmUJQ0ZHX0xPQURfQUREUgkJMHgyMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KIAogI2RlZmluZQlDRkdfSFoJCTEwMDAJCS8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MJKi8KIAogI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQogCisjZGVmaW5lIENGR19DT05TT0xFX0lORk9fUVVJRVQgMQorCiAvKgogICogTG93IExldmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZ3MKICAqIChhZGRyZXNzIG1hcHBpbmdzLCByZWdpc3RlciBpbml0aWFsIHZhbHVlcywgZXRjLikKQEAgLTI1MCw3ICsyNTQsNyBAQAogICoKICAqIElmIHRoaXMgaXMgYSA4MCBNSHogQ1BVLCBzZXQgUExMIG11bHRpcGxpY2F0aW9uIGZhY3RvciB0byA1ICg1KjE2PTgwKSEKICAqLwotI2RlZmluZSBDRkdfUExQUkNSICggKDMtMSk8PFBMUFJDUl9NRl9TSElGVCB8IFBMUFJDUl9URVhQUyB8IFBMUFJDUl9UTUlTVCApCisjZGVmaW5lIENGR19QTFBSQ1IgKCAoNS0xKTw8UExQUkNSX01GX1NISUZUIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUICkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogU0NDUiAtIFN5c3RlbSBDbG9jayBhbmQgcmVzZXQgQ29udHJvbCBSZWdpc3RlcgkJMTUtMjcKQEAgLTI1OSw3ICsyNjMsNyBAQAogICogcG93ZXIgbWFuYWdlbWVudCBhbmQgc29tZSBvdGhlciBpbnRlcm5hbCBjbG9ja3MKICAqLwogI2RlZmluZSBTQ0NSX01BU0sJU0NDUl9FQkRGMDAKLSNkZWZpbmUgQ0ZHX1NDQ1IJKCBTQ0NSX1RCUyAgfCAgIFNDQ1JfRUJERjAwIHwgIFwKKyNkZWZpbmUgQ0ZHX1NDQ1IJKFNDQ1JfVEJTIHwgU0NDUl9FQkRGMDEgfCAgXAogCQkJIFNDQ1JfQ09NMDAgICB8IFNDQ1JfREZTWU5DMDAgfCBTQ0NSX0RGQlJHMDAgIHwgXAogCQkJIFNDQ1JfREZOTDAwMCB8IFNDQ1JfREZOSDAwMCAgfCBTQ0NSX0RGTENEMDAwIHwgXAogCQkJIFNDQ1JfREZBTENEMDApCkBAIC0yNzEsNyArMjc1LDcgQEAKICAqLwogCiAvKiBLVVA0SyB1c2UgYm90aCBzbG90cywgU0xPVF9BIGFzICJwcmltYXJ5Ii4gKi8KLSNkZWZpbmUJQ09ORklHX1BDTUNJQV9TTE9UX0EgMQkKKyNkZWZpbmUJQ09ORklHX1BDTUNJQV9TTE9UX0EgMQogCiAjZGVmaW5lIENGR19QQ01DSUFfTUVNX0FERFIJKDB4RTAwMDAwMDApCiAjZGVmaW5lIENGR19QQ01DSUFfTUVNX1NJWkUJKCA2NCA8PCAyMCApCkBAIC00MjgsMTIgKzQzMiwxMiBAQAogI2RlZmluZSBCT09URkxBR19XQVJNCTB4MDIJCS8qIFNvZnR3YXJlIHJlYm9vdAkJCSovCiAKIAotI2lmIE5PVF9VU0VEX0ZPUl9OT1cKKwogI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfS0VZRUQJCS8qIHVzZSBrZXkgc3RyaW5ncyB0byBzdG9wIGF1dG9ib290ICovCiAjaWYgMAogI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfUFJPTVBUCQkiQm9vdGUgaW4gJWQgU2VrdW5kZW4gLSBzdG9wIG1pdCBcIjJcIlxuIgogI2VuZGlmCi0jZGVmaW5lIENPTkZJR19BVVRPQk9PVF9TVE9QX1NUUgkiMiIgLyogZWFzeSB0byBzdG9wIGZvciBub3cgKi8KLSNlbmRpZiAvKiBOT1RfVVNFRF9GT1JfTk9XICovCisjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9TVE9QX1NUUgkiLiIgLyogZWFzeSB0byBzdG9wIGZvciBub3cgKi8KKwogCiAjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1JCQzgyMy5oIGIvaW5jbHVkZS9jb25maWdzL1JCQzgyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZWVkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUkJDODIzLmgKQEAgLTAsMCArMSw0MTggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogTW9kaWZpZWQgYnkgVWRpIEZpbmtlbHN0ZWluIHVkaWZAdWRpZi5jb20KKyAqIEZvciB0aGUgUkJDODIzIGJvYXJkLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBib2FyZC9jb25maWcuaCAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYm9hcmQgc3BlY2lmaWMKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqIChlYXN5IHRvIGNoYW5nZSkKKyAqLworCisjZGVmaW5lIENPTkZJR19NUEM4MjMJCTEJLyogVGhpcyBpcyBhIE1QQzgyMyBDUFUJCSovCisjZGVmaW5lIENPTkZJR19SQkM4MjMJCTEJLyogLi4ub24gYSBSQkM4MjMgbW9kdWxlCSovCisKKworI2lmIDAKKyNkZWZpbmUgREVCVUcJCQkxCisjZGVmaW5lIENPTkZJR19MQVNUX1NUQUdFX0lOSVQKKyNlbmRpZgorI2RlZmluZSBDT05GSUdfS0VZQk9BUkQJCTEJLyogVGhpcyBib2FyZCBoYXMgYSBjdXN0b20ga2V5YnBhcmQgKi8KKyNkZWZpbmUgQ09ORklHX0xDRAkJMQkvKiB1c2UgTENEIGNvbnRyb2xsZXIgLi4uCSovCisjZGVmaW5lIENPTkZJR19ISVRBQ0hJX1NQMTlYMDAxX1oxQQkvKiBUaGUgTENEIHR5cGUgd2UgdXNlICovCisKKyNkZWZpbmUJQ09ORklHXzh4eF9DT05TX1NNQzIJMQkvKiBDb25zb2xlIGlzIG9uIFNNQzIJCSovCisjdW5kZWYJQ09ORklHXzh4eF9DT05TX1NNQzEKKyN1bmRlZglDT05GSUdfOHh4X0NPTlNfTk9ORQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAkvKiBjb25zb2xlIGJhdWRyYXRlID0gMTE1a2JwcwkqLworI2lmIDEKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQktMQkvKiBhdXRvYm9vdCBkaXNhYmxlZAkJKi8KKyNlbHNlCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMJKi8KKyNlbmRpZgorCisjZGVmaW5lCUNPTkZJR19DTE9DS1NfSU5fTUhaCTEJLyogY2xvY2tzIHBhc3NzZWQgdG8gTGludXggaW4gTUh6ICovCisjZGVmaW5lIENPTkZJR184eHhfR0NMS19GUkVRICAgIDQ4MDAwMDAwTAorCisjZGVmaW5lIENPTkZJR19QUkVCT09UCSJlY2hvO2VjaG8gVHlwZSBcInJ1biBmbGFzaF9uZnNcIiB0byBtb3VudCByb290IGZpbGVzeXN0ZW0gb3ZlciBORlM7ZWNobyIKKworI3VuZGVmCUNPTkZJR19CT09UQVJHUworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJCQkJCQkJXAorCSJib290cDsgIiAJCQkJCQkJCVwKKwkic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0kKHNlcnZlcmlwKTokKHJvb3RwYXRoKSAiIAlcCisJImlwPSQoaXBhZGRyKTokKHNlcnZlcmlwKTokKGdhdGV3YXlpcCk6JChuZXRtYXNrKTokKGhvc3RuYW1lKTo6b2ZmOyAiIAlcCisJImJvb3RtIgorCisjZGVmaW5lIENPTkZJR19MT0FEU19FQ0hPCTEJLyogZWNobyBvbiBmb3Igc2VyaWFsIGRvd25sb2FkCSovCisjdW5kZWYJQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCQkvKiBkb24ndCBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2UJKi8KKworI3VuZGVmCUNPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkCQkqLworCisjZGVmaW5lIENPTkZJR19TVEFUVVNfTEVECTEJLyogU3RhdHVzIExFRCBlbmFibGVkCQkqLworCisjdW5kZWYJQ09ORklHX0NBTl9EUklWRVIJCS8qIENBTiBEcml2ZXIgc3VwcG9ydCBkaXNhYmxlZAkqLworCisjZGVmaW5lIENPTkZJR19CT09UUF9NQVNLCShDT05GSUdfQk9PVFBfREVGQVVMVCB8IENPTkZJR19CT09UUF9CT09URklMRVNJWkUpCisKKyN1bmRlZiBDT05GSUdfTUFDX1BBUlRJVElPTgorI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgorCisjdW5kZWYJQ09ORklHX1JUQ19NUEM4eHgJCS8qIGRvbid0IHVzZSBpbnRlcm5hbCBSVEMgb2YgTVBDOHh4IChubyBiYXR0ZXJ5KQkqLworCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQworI2RlZmluZSBDRkdfSTJDX1NQRUVEIDQwMDAwCisjZGVmaW5lIENGR19JMkNfU0xBVkUgMHhmZQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSICAgICAgIDB4NTAKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAxCisjZGVmaW5lIENGR19FRVBST01fV1JJVEVfQklUUyAgICAgICAgNAorI2RlZmluZSBDRkdfRUVQUk9NX1dSSVRFX0RFTEFZX01TICAgMTAKKworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJICAgICAgKCBDRkdfQ01EX0FMTAkmIFwKKwkJCQl+Q0ZHX0NNRF9QQ01DSUEJJiBcCisJCQkJfkNGR19DTURfSURFCSYgXAorCQkJCX5DRkdfQ01EX1BDSQkmIFwKKwkJCQl+Q0ZHX0NNRF9GREMJJiBcCisJCQkJfkNGR19DTURfSFdGTE9XCSYgXAorCQkJCX5DRkdfQ01EX0ZET1MJJiBcCisJCQkJfkNGR19DTURfU0NTSQkmIFwKKwkJCQl+Q0ZHX0NNRF9TRVRHRVREQ1IJJiBcCisJCQkJfkNGR19DTURfQlNQCSYgXAorCQkJCX5DRkdfQ01EX1VTQgkmIFwKKwkJCQl+Q0ZHX0NNRF9WRkQJJiBcCisJCQkJfkNGR19DTURfU1BJCSYgXAorCQkJCS8qIH5DRkdfQ01EX0kyQwkmICovIFwKKwkJCQl+Q0ZHX0NNRF9JUlEJJiBcCisJCQkJfkNGR19DTURfTkFORAkmIFwKKwkJCQl+Q0ZHX0NNRF9KRkZTMgkmIFwKKwkJCQl+Q0ZHX0NNRF9EVFQJJiBcCisJCQkJfkNGR19DTURfTUlJCSYgXAorCQkJCS8qfkNGR19DTURfTkVUCSYqLyBcCisJCQkJLyp+Q0ZHX0NNRF9FTEYJJiovIFwKKwkJCQkvKiB+Q0ZHX0NNRF9FRVBST00JJiAqLyBcCisJCQkJfkNGR19DTURfREFURQkpCisKKy8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUJQ0ZHX1BST01QVAkiPT4gIgkJLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lCUNGR19DQlNJWkUJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNlbHNlCisjZGVmaW5lCUNGR19DQlNJWkUJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2VuZGlmCisjZGVmaW5lCUNGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZQlDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCUNGR19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCTB4MDQwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHgwQzAwMDAwCS8qIDQgLi4uIDEyIE1CIGluIERSQU0JKi8KKworI2RlZmluZQlDRkdfTE9BRF9BRERSCQkweDAxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KKworI2RlZmluZQlDRkdfSFoJCTEwMDAJCS8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MJKi8KKworI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisvKgorICogTG93IExldmVsIENvbmZpZ3VyYXRpb24gU2V0dGluZ3MKKyAqIChhZGRyZXNzIG1hcHBpbmdzLCByZWdpc3RlciBpbml0aWFsIHZhbHVlcywgZXRjLikKKyAqIFlvdSBzaG91bGQga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgaWYgeW91IG1ha2UgY2hhbmdlcyBoZXJlLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJbnRlcm5hbCBNZW1vcnkgTWFwcGVkIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQ0ZHX0lNTVIJCTB4RkYwMDAwMDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGVmaW5pdGlvbnMgZm9yIGluaXRpYWwgc3RhY2sgcG9pbnRlciBhbmQgZGF0YSBhcmVhIChpbiBEUFJBTSkKKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUglDRkdfSU1NUgorI2RlZmluZQlDRkdfSU5JVF9SQU1fRU5ECTB4MkYwMAkvKiBFbmQgb2YgdXNlZCBhcmVhIGluIERQUkFNCSovCisjZGVmaW5lCUNGR19HQkxfREFUQV9TSVpFCTY0ICAvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorI2RlZmluZQlDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTdGFydCBhZGRyZXNzZXMgZm9yIHRoZSBmaW5hbCBtZW1vcnkgY29uZmlndXJhdGlvbgorICogKFNldCB1cCBieSB0aGUgc3RhcnR1cCBjb2RlKQorICogUGxlYXNlIG5vdGUgdGhhdCBDRkdfU0RSQU1fQkFTRSBfbXVzdF8gc3RhcnQgYXQgMAorICovCisjZGVmaW5lCUNGR19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkweEZGRjAwMDAwCisjaWYgZGVmaW5lZChERUJVRykKKyNkZWZpbmUJQ0ZHX01PTklUT1JfTEVOCQkoMzg0IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uaXRvcgkqLworI2Vsc2UKKyNkZWZpbmUJQ0ZHX01PTklUT1JfTEVOCQkoMzg0IDw8IDEwKQkvKiBSZXNlcnZlIDE5MiBrQiBmb3IgTW9uaXRvcgkqLworI2VuZGlmCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJQ0ZHX0ZMQVNIX0JBU0UKKyNkZWZpbmUJQ0ZHX01BTExPQ19MRU4JCSgxMjggPDwgMTApCS8qIFJlc2VydmUgMTI4IGtCIGZvciBtYWxsb2MoKQkqLworCisvKgorICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQorICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmluZQlDRkdfQk9PVE1BUFNaCQkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eAkqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGTEFTSCBvcmdhbml6YXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAk2NwkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKQkqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKQkqLworCisjZGVmaW5lCUNGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZQlDRkdfRU5WX09GRlNFVAkJMHgxMDAwMAkvKiAgIE9mZnNldCAgIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLworI2RlZmluZQlDRkdfRU5WX1NJWkUJCTB4MTAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ2FjaGUgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRQkxNgkvKiBGb3IgYWxsIE1QQzh4eCBDUFVzCQkJKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTQJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTWVBDUiAtIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wJCQkJMTEtOQorICogU1lQQ1IgY2FuIG9ubHkgYmUgd3JpdHRlbiBvbmNlIGFmdGVyIHJlc2V0IQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU29mdHdhcmUgJiBCdXMgTW9uaXRvciBUaW1lciBtYXgsIEJ1cyBNb25pdG9yIGVuYWJsZSwgU1cgV2F0Y2hkb2cgZnJlZXplCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKKyNkZWZpbmUgQ0ZHX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgXAorCQkJIFNZUENSX1NXRSAgfCBTWVBDUl9TV1JJfCBTWVBDUl9TV1ApCisjZWxzZQorLyoKKyNkZWZpbmUgQ0ZHX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgU1lQQ1JfU1dQKQorKi8KKyNkZWZpbmUgQ0ZHX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dSSSB8IFNZUENSX1NXUCkKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTSVVNQ1IgLSBTSVUgTW9kdWxlIENvbmZpZ3VyYXRpb24JCQkJMTEtNgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUENNQ0lBIGNvbmZpZy4sIG11bHRpLWZ1bmN0aW9uIHBpbiB0cmktc3RhdGUKKyAqLworI2RlZmluZSBDRkdfU0lVTUNSCShTSVVNQ1JfREJHQzExIHwgU0lVTUNSX0RCUEMwMCB8IFNJVU1DUl9NTFJDMDAgfCBTSVVNQ1JfRlJDKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUQlNDUiAtIFRpbWUgQmFzZSBTdGF0dXMgYW5kIENvbnRyb2wJCQkJMTEtMjYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENsZWFyIFJlZmVyZW5jZSBJbnRlcnJ1cHQgU3RhdHVzLCBUaW1lYmFzZSBmcmVlemluZyBlbmFibGVkCisgKi8KKyNkZWZpbmUgQ0ZHX1RCU0NSCShUQlNDUl9SRUZBIHwgVEJTQ1JfUkVGQiB8IFRCU0NSX1RCRikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUlRDU0MgLSBSZWFsLVRpbWUgQ2xvY2sgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyCQkxMS0yNworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIENGR19SVENTQwkoUlRDU0NfU0VDIHwgUlRDU0NfQUxSIHwgUlRDU0NfUlRGfCBSVENTQ19SVEUpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBJU0NSIC0gUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cyBhbmQgQ29udHJvbAkJMTEtMzEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENsZWFyIFBlcmlvZGljIEludGVycnVwdCBTdGF0dXMsIEludGVycnVwdCBUaW1lciBmcmVlemluZyBlbmFibGVkCisgKi8KKyNkZWZpbmUgQ0ZHX1BJU0NSCShQSVNDUl9QUyB8IFBJU0NSX1BJVEYpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBMUFJDUiAtIFBMTCwgTG93LVBvd2VyLCBhbmQgUmVzZXQgQ29udHJvbCBSZWdpc3RlcgkJMTUtMzAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlc2V0IFBMTCBsb2NrIHN0YXR1cyBzdGlja3kgYml0LCB0aW1lciBleHBpcmVkIHN0YXR1cyBiaXQgYW5kIHRpbWVyCisgKiBpbnRlcnJ1cHQgc3RhdHVzIGJpdAorICoKKyAqLworCisvKgorICogZm9yIDQ4IE1Ieiwgd2UgdXNlIGEgNCBNSHogY2xvY2sgKiAxMgorICovCisjZGVmaW5lIENGR19QTFBSQ1IJCQkJCQkJXAorCQkoICgxMi0xKTw8UExQUkNSX01GX1NISUZUIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX0xPTFJFICkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU0NDUiAtIFN5c3RlbSBDbG9jayBhbmQgcmVzZXQgQ29udHJvbCBSZWdpc3RlcgkJMTUtMjcKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNldCBjbG9jayBvdXRwdXQsIHRpbWViYXNlIGFuZCBSVEMgc291cmNlIGFuZCBkaXZpZGVyLAorICogcG93ZXIgbWFuYWdlbWVudCBhbmQgc29tZSBvdGhlciBpbnRlcm5hbCBjbG9ja3MKKyAqLworI2RlZmluZSBTQ0NSX01BU0sJU0NDUl9FQkRGMTEKKyNkZWZpbmUgQ0ZHX1NDQ1IJKFNDQ1JfUlRESVYgICB8IFNDQ1JfUlRTRUwgICAgfCBTQ0NSX0NSUUVOICAgIHwgXAorCQkgICAgICAgICBTQ0NSX1BSUUVOICAgfCBTQ0NSX0VCREYwMCAgIHwgXAorCQkgICAgICAgICBTQ0NSX0NPTTAxICAgfCBTQ0NSX0RGU1lOQzAwIHwgU0NDUl9ERkJSRzAwICB8IFwKKwkJCSBTQ0NSX0RGTkwwMDAgfCBTQ0NSX0RGTkgwMDAgIHwgU0NDUl9ERkxDRDAwMSB8IFwKKwkJCSBTQ0NSX0RGQUxDRDAwKQorCisjaWZkZWYgTk9UX1VTRUQKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBDTUNJQSBzdHVmZgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqLworI2RlZmluZSBDRkdfUENNQ0lBX01FTV9BRERSCSgweEUwMDAwMDAwKQorI2RlZmluZSBDRkdfUENNQ0lBX01FTV9TSVpFCSggNjQgPDwgMjAgKQorI2RlZmluZSBDRkdfUENNQ0lBX0RNQV9BRERSCSgweEU0MDAwMDAwKQorI2RlZmluZSBDRkdfUENNQ0lBX0RNQV9TSVpFCSggNjQgPDwgMjAgKQorI2RlZmluZSBDRkdfUENNQ0lBX0FUVFJCX0FERFIJKDB4RTgwMDAwMDApCisjZGVmaW5lIENGR19QQ01DSUFfQVRUUkJfU0laRQkoIDY0IDw8IDIwICkKKyNkZWZpbmUgQ0ZHX1BDTUNJQV9JT19BRERSCSgweEVDMDAwMDAwKQorI2RlZmluZSBDRkdfUENNQ0lBX0lPX1NJWkUJKCA2NCA8PCAyMCApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElERS9BVEEgc3R1ZmYgKFN1cHBvcnRzIElERSBoYXJkZGlzayBvbiBQQ01DSUEgQWRhcHRlcikKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjZGVmaW5lCUNPTkZJR19JREVfUENDQVJECTEJLyogVXNlIElERSB3aXRoIFBDIENhcmQJQWRhcHRlcgkqLworCisjdW5kZWYJQ09ORklHX0lERV9QQ01DSUEJCS8qIERpcmVjdCBJREUgICAgbm90IHN1cHBvcnRlZAkqLworI3VuZGVmCUNPTkZJR19JREVfTEVECQkJLyogTEVEICAgZm9yIGlkZSBub3Qgc3VwcG9ydGVkCSovCisjdW5kZWYJQ09ORklHX0lERV9SRVNFVAkJLyogcmVzZXQgZm9yIGlkZSBub3Qgc3VwcG9ydGVkCSovCisKKyNkZWZpbmUgQ0ZHX0lERV9NQVhCVVMJCTEJLyogbWF4LiAxIElERSBidXMJCSovCisjZGVmaW5lIENGR19JREVfTUFYREVWSUNFCTEJLyogbWF4LiAxIGRyaXZlIHBlciBJREUgYnVzCSovCisKKyNkZWZpbmUgQ0ZHX0FUQV9JREUwX09GRlNFVAkweDAwMDAKKworI2RlZmluZSBDRkdfQVRBX0JBU0VfQUREUglDRkdfUENNQ0lBX01FTV9BRERSCisKKy8qIE9mZnNldCBmb3IgZGF0YSBJL08JCQkqLworI2RlZmluZSBDRkdfQVRBX0RBVEFfT0ZGU0VUCShDRkdfUENNQ0lBX01FTV9TSVpFICsgMHgzMjApCisKKy8qIE9mZnNldCBmb3Igbm9ybWFsIHJlZ2lzdGVyIGFjY2Vzc2VzCSovCisjZGVmaW5lIENGR19BVEFfUkVHX09GRlNFVAkoMiAqIENGR19QQ01DSUFfTUVNX1NJWkUgKyAweDMyMCkKKworLyogT2Zmc2V0IGZvciBhbHRlcm5hdGUgcmVnaXN0ZXJzCSovCisjZGVmaW5lIENGR19BVEFfQUxUX09GRlNFVAkweDAxMDAKKworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERpc2stT24tQ2hpcCBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDRkdfTUFYX0RPQ19ERVZJQ0UJMQkvKiBNYXggbnVtYmVyIG9mIERPQyBkZXZpY2VzCQkqLworI2RlZmluZSBDRkdfRE9DX1NIT1JUX1RJTUVPVVQKKyNkZWZpbmUgQ0ZHX0RPQ19TVVBQT1JUXzIwMDAKKyNkZWZpbmUgQ0ZHX0RPQ19TVVBQT1JUX01JTExFTk5JVU0KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKi8KKy8qI2RlZmluZQlDRkdfREVSCTB4MjAwMjAwMEYqLworI2RlZmluZSBDRkdfREVSCTAKKworLyoKKyAqIEluaXQgTWVtb3J5IENvbnRyb2xsZXI6CisgKgorICogQlIwLzEgYW5kIE9SMC8xIChGTEFTSCkKKyAqLworCisjZGVmaW5lIEZMQVNIX0JBU0UwX1BSRUxJTQkweEZGRjAwMDAwCS8qIEZMQVNIIGJhbmsgIzAJKi8KKyNkZWZpbmUgRkxBU0hfQkFTRTFfUFJFTElNCTB4MDQwMDAwMDAJLyogRC5PLkMgTWlsbGVuaXVtCSovCisKKy8qIHVzZWQgdG8gcmUtbWFwIEZMQVNIIGJvdGggd2hlbiBzdGFydGluZyBmcm9tIFNSQU0gb3IgRkxBU0g6CisgKiByZXN0cmljdCBhY2Nlc3MgZW5vdWdoIHRvIGtlZXAgU1JBTSB3b3JraW5nIChpZiBhbnkpCisgKiBidXQgbm90IHRvbyBtdWNoIHRvIG1lZGRsZSB3aXRoIEZMQVNIIGFjY2Vzc2VzCisgKi8KKyNkZWZpbmUgQ0ZHX1BSRUxJTV9PUl9BTQkweEZGRjgwMDAwCS8qIE9SIGFkZHIgbWFzayAqLworCisvKiBGTEFTSCB0aW1pbmc6IEFDUyA9IDAwLCBUUkxYID0gMCwgQ1NOVCA9IDEsIFNDWSA9IDcsIEVIVFIgPSAxCSovCisjZGVmaW5lIENGR19PUl9USU1JTkdfRkxBU0ggIChPUl9BQ1NfRElWMSB8IE9SX0JJIHwgT1JfU0NZXzdfQ0xLIHwgT1JfRUhUUikKKworI2RlZmluZSBDRkdfT1JfVElNSU5HX01TWVMgICAoT1JfQUNTX0RJVjEgfCBPUl9CSSkKKworI2RlZmluZSBDRkdfT1IwX1BSRUxJTQkoQ0ZHX1BSRUxJTV9PUl9BTSB8IENGR19PUl9USU1JTkdfRkxBU0gpCisjZGVmaW5lIENGR19CUjBfUFJFTElNCSgoRkxBU0hfQkFTRTBfUFJFTElNICYgQlJfQkFfTVNLKSB8IEJSX1BTXzggfCBCUl9WKQorCisjZGVmaW5lIENGR19PUjFfUFJFTElNCShDRkdfUFJFTElNX09SX0FNIHwgQ0ZHX09SX1RJTUlOR19NU1lTKQorI2RlZmluZSBDRkdfQlIxX1BSRUxJTQkoKEZMQVNIX0JBU0UxX1BSRUxJTSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1CIHwgXAorCQkgICAgICAgICAgQlJfUFNfOCB8IEJSX1YpCisKKy8qCisgKiBCUjQgYW5kIE9SNCAoU0RSQU0pCisgKgorICovCisjZGVmaW5lIFNEUkFNX0JBU0U0X1BSRUxJTQkweDAwMDAwMDAwCS8qIFNEUkFNIGJhbmsgIzAJKi8KKyNkZWZpbmUJU0RSQU1fTUFYX1NJWkUJCTB4MDQwMDAwMDAJLyogbWF4IDY0IE1CIHBlciBiYW5rCSovCisKKy8qCisgKiBTRFJBTSB0aW1pbmc6CisgKi8KKyNkZWZpbmUgQ0ZHX09SX1RJTUlOR19TRFJBTQkoT1JfQ1NOVF9TQU0pCisKKyNkZWZpbmUgQ0ZHX09SNF9QUkVMSU0JKH4oU0RSQU1fTUFYX1NJWkUtMSkgfCBDRkdfT1JfVElNSU5HX1NEUkFNICkKKyNkZWZpbmUgQ0ZHX0JSNF9QUkVMSU0JKChTRFJBTV9CQVNFNF9QUkVMSU0gJiBCUl9CQV9NU0spIHwgQlJfTVNfVVBNQSB8IEJSX1YgKQorCisvKgorICogTWVtb3J5IFBlcmlvZGljIFRpbWVyIFByZXNjYWxlcgorICovCisKKy8qIHBlcmlvZGljIHRpbWVyIGZvciByZWZyZXNoICovCisjZGVmaW5lIENGR19NQU1SX1BUQQkxODcJCS8qIHN0YXJ0IHdpdGggZGl2aWRlciBmb3IgNDggTUh6CSovCisKKy8qIHJlZnJlc2ggcmF0ZSAxNS42IHVzICg9IDY0IG1zIC8gNEsgPSA2Mi40IC8gcXVhZCBidXJzdHMpIGZvciA8PSAxMjggTUJpdAkqLworI2RlZmluZSBDRkdfTVBUUFJfMkJLXzRLCU1QVFBSX1BUUF9ESVYxNgkJLyogc2V0dGluZyBmb3IgMiBiYW5rcwkqLworI2RlZmluZSBDRkdfTVBUUFJfMUJLXzRLCU1QVFBSX1BUUF9ESVYzMgkJLyogc2V0dGluZyBmb3IgMSBiYW5rCSovCisKKy8qIHJlZnJlc2ggcmF0ZSA3LjggdXMgKD0gNjQgbXMgLyA4SyA9IDMxLjIgLyBxdWFkIGJ1cnN0cykgZm9yIDI1NiBNQml0CQkqLworI2RlZmluZSBDRkdfTVBUUFJfMkJLXzhLCU1QVFBSX1BUUF9ESVY4CQkvKiBzZXR0aW5nIGZvciAyIGJhbmtzCSovCisjZGVmaW5lIENGR19NUFRQUl8xQktfOEsJTVBUUFJfUFRQX0RJVjE2CQkvKiBzZXR0aW5nIGZvciAxIGJhbmsJKi8KKworLyoKKyAqIE1BTVIgc2V0dGluZ3MgZm9yIFNEUkFNCisgKi8KKworLyogOCBjb2x1bW4gU0RSQU0gKi8KKyNkZWZpbmUgQ0ZHX01BTVJfOENPTAkoKENGR19NQU1SX1BUQSA8PCBNQU1SX1BUQV9TSElGVCkgIHwgTUFNUl9QVEFFCSAgICB8CVwKKwkJCSBNQU1SX0FNQV9UWVBFXzAgfCBNQU1SX0RTQV8xX0NZQ0wgfCBNQU1SX0cwQ0xBX0ExMSB8CVwKKwkJCSBNQU1SX1JMRkFfMVgJIHwgTUFNUl9XTEZBXzFYCSAgIHwgTUFNUl9UTEZBXzRYKQorLyogOSBjb2x1bW4gU0RSQU0gKi8KKyNkZWZpbmUgQ0ZHX01BTVJfOUNPTAkoKENGR19NQU1SX1BUQSA8PCBNQU1SX1BUQV9TSElGVCkgIHwgTUFNUl9QVEFFCSAgICB8CVwKKwkJCSBNQU1SX0FNQV9UWVBFXzEgfCBNQU1SX0RTQV8xX0NZQ0wgfCBNQU1SX0cwQ0xBX0ExMCB8CVwKKwkJCSBNQU1SX1JMRkFfMVgJIHwgTUFNUl9XTEZBXzFYCSAgIHwgTUFNUl9UTEZBXzRYKQorCisKKy8qCisgKiBJbnRlcm5hbCBEZWZpbml0aW9ucworICoKKyAqIEJvb3QgRmxhZ3MKKyAqLworI2RlZmluZQlCT09URkxBR19DT0xECTB4MDEJCS8qIE5vcm1hbCBQb3dlci1PbjogQm9vdCBmcm9tIEZMQVNICSovCisjZGVmaW5lIEJPT1RGTEFHX1dBUk0JMHgwMgkJLyogU29mdHdhcmUgcmVib290CQkJKi8KKworI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZGV2aWNlcy5oIGIvaW5jbHVkZS9kZXZpY2VzLmgKaW5kZXggNGY0NmUxNy4uYTI3YzRlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kZXZpY2VzLmgKKysrIGIvaW5jbHVkZS9kZXZpY2VzLmgKQEAgLTEwMiw4ICsxMDIsOCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPKSB8fCBkZWZpbmVkKENPTkZJR19DRkJfQ09OU09MRSkKIGludAlkcnZfdmlkZW9faW5pdCAodm9pZCk7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfV0xfNFBQTV9LRVlCT0FSRAotaW50CWRydl93bGtiZF9pbml0ICh2b2lkKTsKKyNpZmRlZiBDT05GSUdfS0VZQk9BUkQKK2ludAlkcnZfa2V5Ym9hcmRfaW5pdCAodm9pZCk7CiAjZW5kaWYKIAogI2VuZGlmCS8qIF9ERVZJQ0VTX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xjZC5oIGIvaW5jbHVkZS9sY2QuaAppbmRleCBkMDYzYzljLi5lNTJhNjI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xjZC5oCisrKyBiL2luY2x1ZGUvbGNkLmgKQEAgLTI5LDYgKzI5LDEyIEBACiAjaWZuZGVmIF9MQ0RfSF8KICNkZWZpbmUgX0xDRF9IXwogCisjaWYgZGVmaW5lZChDT05GSUdfUkJDODIzKQordm9pZAlsY2RfZGlzYWJsZSAodm9pZCk7CisjZW5kaWYKKworZXh0ZXJuIGNoYXIgbGNkX2lzX2VuYWJsZWQ7CisKIC8qIFZpZGVvIGZ1bmN0aW9ucyAqLwogCiBpbnQJbGNkX2luaXQJKHZvaWQgKmxjZGJhc2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tcGM4eHguaCBiL2luY2x1ZGUvbXBjOHh4LmgKaW5kZXggYTI4YzZhYy4uZWY2ZDNmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tcGM4eHguaAorKysgYi9pbmNsdWRlL21wYzh4eC5oCkBAIC00MCw4ICs0MCw4IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTWVBDUiAtIFN5c3RlbSBQcm90ZWN0aW9uIENvbnRyb2wgUmVnaXN0ZXIJCQkJMTEtOQogICovCi0jZGVmaW5lIFNZUENSX1NXVEMJMHhmZmZmMDAwMAkvKiBTb2Z0d2FyZSBXYXRjaGRvZyBUaW1lciBDb3VudAkqLwotI2RlZmluZSBTWVBDUl9CTVQJMHgwMDAwZmYwMAkvKiBCdXMgTW9uaXRvciBUaW1pbmcJCQkqLworI2RlZmluZSBTWVBDUl9TV1RDCTB4RkZGRjAwMDAJLyogU29mdHdhcmUgV2F0Y2hkb2cgVGltZXIgQ291bnQJKi8KKyNkZWZpbmUgU1lQQ1JfQk1UCTB4MDAwMEZGMDAJLyogQnVzIE1vbml0b3IgVGltaW5nCQkJKi8KICNkZWZpbmUgU1lQQ1JfQk1FCTB4MDAwMDAwODAJLyogQnVzIE1vbml0b3IgRW5hYmxlCQkJKi8KICNkZWZpbmUgU1lQQ1JfU1dGCTB4MDAwMDAwMDgJLyogU29mdHdhcmUgV2F0Y2hkb2cgRnJlZXplCQkqLwogI2RlZmluZSBTWVBDUl9TV0UJMHgwMDAwMDAwNAkvKiBTb2Z0d2FyZSBXYXRjaGRvZyBFbmFibGUJCSovCkBAIC03OCw3ICs3OCw3IEBACiAjZGVmaW5lIFNJVU1DUl9NTFJDMDAJMHgwMDAwMDAwMAkvKiBNdWx0aSBMZXZlbCBSZXNlcnZhLiBDdHJsCQkqLwogI2RlZmluZSBTSVVNQ1JfTUxSQzAxCTB4MDAwMDA0MDAJLyogLSAiIC0JCQkJKi8KICNkZWZpbmUgU0lVTUNSX01MUkMxMAkweDAwMDAwODAwCS8qIC0gIiAtCQkJCSovCi0jZGVmaW5lIFNJVU1DUl9NTFJDMTEJMHgwMDAwMGMwMAkvKiAtICIgLQkJCQkqLworI2RlZmluZSBTSVVNQ1JfTUxSQzExCTB4MDAwMDBDMDAJLyogLSAiIC0JCQkJKi8KICNkZWZpbmUgU0lVTUNSX0FFTUUJMHgwMDAwMDIwMAkvKiBBc3luY2hybyBFeHRlcm5hbCBNYXN0ZXIJCSovCiAjZGVmaW5lIFNJVU1DUl9TRU1FCTB4MDAwMDAxMDAJLyogU3luY2hybyBFeHRlcm5hbCBNYXN0ZXIJCSovCiAjZGVmaW5lIFNJVU1DUl9CU0MJMHgwMDAwMDA4MAkvKiBCeXRlIFNlbGVjdCBDb25maWd1cmF0aW9uCQkqLwpAQCAtMTIwLDcgKzEyMCw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQTFBSQ1IgLSBQTEwsIExvdy1Qb3dlciwgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIJCQkxNS0zMAogICovCi0jZGVmaW5lIFBMUFJDUl9NRl9NU0sJMHhmZmYwMDAwMAkvKiBNdWx0aXBsaWNhdGlvbiBmYWN0b3IgYml0cwkJKi8KKyNkZWZpbmUgUExQUkNSX01GX01TSwkweEZGRjAwMDAwCS8qIE11bHRpcGxpY2F0aW9uIGZhY3RvciBiaXRzCQkqLwogI2RlZmluZSBQTFBSQ1JfTUZfU0hJRlQgMHgwMDAwMDAxNAkvKiBNdWx0aXBsaWNhdGlvbiBmYWN0b3Igc2hpZnQgdmFsdWUJKi8KICNkZWZpbmUgUExQUkNSX1NQTFNTCTB4MDAwMDgwMDAJLyogU1BMTCBMb2NrIFN0YXR1cyBTdGlja3kgYml0CQkqLwogI2RlZmluZSBQTFBSQ1JfVEVYUFMJMHgwMDAwNDAwMAkvKiBURVhQIFN0YXR1cwkJCQkqLwpAQCAtMTgyLDI0ICsxODIsMjQgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEJSIC0gTWVtb3J5IENvbnRyb2xlcjogQmFzZSBSZWdpc3RlcgkJCQkJMTYtOQogICovCi0jZGVmaW5lIEJSX0JBX01TSwkweGZmZmY4MDAwCS8qIEJhc2UgQWRkcmVzcyBNYXNrCQkJKi8KKyNkZWZpbmUgQlJfQkFfTVNLCTB4RkZGRjgwMDAJLyogQmFzZSBBZGRyZXNzIE1hc2sJCQkqLwogI2RlZmluZSBCUl9BVF9NU0sJMHgwMDAwNzAwMAkvKiBBZGRyZXNzIFR5cGUgTWFzawkJCSovCi0jZGVmaW5lIEJSX1BTX01TSwkweDAwMDAwYzAwCS8qIFBvcnQgU2l6ZSBNYXNrCQkJKi8KKyNkZWZpbmUgQlJfUFNfTVNLCTB4MDAwMDBDMDAJLyogUG9ydCBTaXplIE1hc2sJCQkqLwogI2RlZmluZSBCUl9QU18zMgkweDAwMDAwMDAwCS8qIDMyIGJpdCBwb3J0IHNpemUJCQkqLwogI2RlZmluZSBCUl9QU18xNgkweDAwMDAwODAwCS8qIDE2IGJpdCBwb3J0IHNpemUJCQkqLwogI2RlZmluZSBCUl9QU184CQkweDAwMDAwNDAwCS8qICA4IGJpdCBwb3J0IHNpemUJCQkqLwogI2RlZmluZSBCUl9QQVJFCQkweDAwMDAwMjAwCS8qIFBhcml0eSBFbmFibGUJCQkqLwogI2RlZmluZSBCUl9XUAkJMHgwMDAwMDEwMAkvKiBXcml0ZSBQcm90ZWN0CQkJKi8KLSNkZWZpbmUgQlJfTVNfTVNLCTB4MDAwMDAwYzAJLyogTWFjaGluZSBTZWxlY3QgTWFzawkJCSovCisjZGVmaW5lIEJSX01TX01TSwkweDAwMDAwMEMwCS8qIE1hY2hpbmUgU2VsZWN0IE1hc2sJCQkqLwogI2RlZmluZSBCUl9NU19HUENNCTB4MDAwMDAwMDAJLyogRy5QLkMuTS4gTWFjaGluZSBTZWxlY3QJCSovCiAjZGVmaW5lIEJSX01TX1VQTUEJMHgwMDAwMDA4MAkvKiBVLlAuTS5BIE1hY2hpbmUgU2VsZWN0CQkqLwotI2RlZmluZSBCUl9NU19VUE1CCTB4MDAwMDAwYzAJLyogVS5QLk0uQiBNYWNoaW5lIFNlbGVjdAkJKi8KKyNkZWZpbmUgQlJfTVNfVVBNQgkweDAwMDAwMEMwCS8qIFUuUC5NLkIgTWFjaGluZSBTZWxlY3QJCSovCiAjZGVmaW5lIEJSX1YJCTB4MDAwMDAwMDEJLyogQmFuayBWYWxpZAkJCQkqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBPUiAtIE1lbW9yeSBDb250cm9sZXI6IE9wdGlvbiBSZWdpc3RlcgkJCQkxNi0xMQogICovCi0jZGVmaW5lIE9SX0FNX01TSwkweGZmZmY4MDAwCS8qIEFkZHJlc3MgTWFzayBNYXNrCQkJKi8KKyNkZWZpbmUgT1JfQU1fTVNLCTB4RkZGRjgwMDAJLyogQWRkcmVzcyBNYXNrIE1hc2sJCQkqLwogI2RlZmluZSBPUl9BVE1fTVNLCTB4MDAwMDcwMDAJLyogQWRkcmVzcyBUeXBlIE1hc2sgTWFzawkJKi8KICNkZWZpbmUgT1JfQ1NOVF9TQU0JMHgwMDAwMDgwMAkvKiBDaGlwIFNlbGVjdCBOZWdhdGlvbiBUaW1lLyBTdGFydAkqLwogCQkJCQkvKiBBZGRyZXNzIE11bHRpcGxleAkJCSovCkBAIC0yMTAsNyArMjEwLDcgQEAKICNkZWZpbmUgT1JfRzVMQQkJMHgwMDAwMDQwMAkvKiBPdXRwdXQgI0dQTDUgb24gI0dQTF9BNQkJKi8KICNkZWZpbmUgT1JfRzVMUwkJMHgwMDAwMDIwMAkvKiBEcml2ZSAjR1BMIGhpZ2ggb24gZmFsbGluZyBlZGdlIG9mLi4uKi8KICNkZWZpbmUgT1JfQkkJCTB4MDAwMDAxMDAJLyogQnVyc3QgaW5oaWJpdAkJCSovCi0jZGVmaW5lIE9SX1NDWV9NU0sJMHgwMDAwMDBmMAkvKiBDeWNsZSBMZW5naHQgaW4gQ2xvY2tzCQkqLworI2RlZmluZSBPUl9TQ1lfTVNLCTB4MDAwMDAwRjAJLyogQ3ljbGUgTGVuZ2h0IGluIENsb2NrcwkJKi8KICNkZWZpbmUgT1JfU0NZXzBfQ0xLCTB4MDAwMDAwMDAJLyogMCBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCiAjZGVmaW5lIE9SX1NDWV8xX0NMSwkweDAwMDAwMDEwCS8qIDEgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLwogI2RlZmluZSBPUl9TQ1lfMl9DTEsJMHgwMDAwMDAyMAkvKiAyIGNsb2NrIGN5Y2xlcyB3YWl0IHN0YXRlcwkJKi8KQEAgLTIyMSwxMiArMjIxLDEyIEBACiAjZGVmaW5lIE9SX1NDWV83X0NMSwkweDAwMDAwMDcwCS8qIDcgY2xvY2sgY3ljbGVzIHdhaXQgc3RhdGVzCQkqLwogI2RlZmluZSBPUl9TQ1lfOF9DTEsJMHgwMDAwMDA4MAkvKiA4IGNsb2NrIGN5Y2xlcyB3YWl0IHN0YXRlcwkJKi8KICNkZWZpbmUgT1JfU0NZXzlfQ0xLCTB4MDAwMDAwOTAJLyogOSBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCi0jZGVmaW5lIE9SX1NDWV8xMF9DTEsJMHgwMDAwMDBhMAkvKiAxMCBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCi0jZGVmaW5lIE9SX1NDWV8xMV9DTEsJMHgwMDAwMDBiMAkvKiAxMSBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCi0jZGVmaW5lIE9SX1NDWV8xMl9DTEsJMHgwMDAwMDBjMAkvKiAxMiBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCi0jZGVmaW5lIE9SX1NDWV8xM19DTEsJMHgwMDAwMDBkMAkvKiAxMyBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCi0jZGVmaW5lIE9SX1NDWV8xNF9DTEsJMHgwMDAwMDBlMAkvKiAxNCBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCi0jZGVmaW5lIE9SX1NDWV8xNV9DTEsJMHgwMDAwMDBmMAkvKiAxNSBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCisjZGVmaW5lIE9SX1NDWV8xMF9DTEsJMHgwMDAwMDBBMAkvKiAxMCBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCisjZGVmaW5lIE9SX1NDWV8xMV9DTEsJMHgwMDAwMDBCMAkvKiAxMSBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCisjZGVmaW5lIE9SX1NDWV8xMl9DTEsJMHgwMDAwMDBDMAkvKiAxMiBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCisjZGVmaW5lIE9SX1NDWV8xM19DTEsJMHgwMDAwMDBEMAkvKiAxMyBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCisjZGVmaW5lIE9SX1NDWV8xNF9DTEsJMHgwMDAwMDBFMAkvKiAxNCBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCisjZGVmaW5lIE9SX1NDWV8xNV9DTEsJMHgwMDAwMDBGMAkvKiAxNSBjbG9jayBjeWNsZXMgd2FpdCBzdGF0ZXMJCSovCiAjZGVmaW5lIE9SX1NFVEEJCTB4MDAwMDAwMDgJLyogRXh0ZXJuYWwgVHJhbnNmZXIgQWNrbm93bGVkZ2UJKi8KICNkZWZpbmUgT1JfVFJMWAkJMHgwMDAwMDAwNAkvKiBUaW1pbmcgUmVsYXhlZAkJCSovCiAjZGVmaW5lIE9SX0VIVFIJCTB4MDAwMDAwMDIJLyogRXh0ZW5kZWQgSG9sZCBUaW1lIG9uIFJlYWQJCSovCkBAIC0yMzUsNyArMjM1LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIE1QVFBSIC0gTWVtb3J5IFBlcmlvZGljIFRpbWVyIFByZXNjYWxlciBSZWdpc3RlcgkJCTE2LTE3CiAgKi8KLSNkZWZpbmUgTVBUUFJfUFRQX01TSwkweGZmMDAJCS8qIFBlcmlvZGljIFRpbWVycyBQcmVzY2FsZXIgTWFzawkqLworI2RlZmluZSBNUFRQUl9QVFBfTVNLCTB4RkYwMAkJLyogUGVyaW9kaWMgVGltZXJzIFByZXNjYWxlciBNYXNrCSovCiAjZGVmaW5lIE1QVFBSX1BUUF9ESVYyCTB4MjAwMAkJLyogQlJHQ0xLIGRpdmlkZWQgYnkgMgkJCSovCiAjZGVmaW5lIE1QVFBSX1BUUF9ESVY0CTB4MTAwMAkJLyogQlJHQ0xLIGRpdmlkZWQgYnkgNAkJCSovCiAjZGVmaW5lIE1QVFBSX1BUUF9ESVY4CTB4MDgwMAkJLyogQlJHQ0xLIGRpdmlkZWQgYnkgOAkJCSovCkBAIC0yNjUsNyArMjY1LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIE1hY2hpbmUgQSBNb2RlIFJlZ2lzdGVyCQkJCQkJMTYtMTMKICAqLwotI2RlZmluZSBNQU1SX1BUQV9NU0sJMHhmZjAwMDAwMAkvKiBQZXJpb2RpYyBUaW1lciBBIHBlcmlvZCBtYXNrCQkqLworI2RlZmluZSBNQU1SX1BUQV9NU0sJMHhGRjAwMDAwMAkvKiBQZXJpb2RpYyBUaW1lciBBIHBlcmlvZCBtYXNrCQkqLwogI2RlZmluZSBNQU1SX1BUQV9TSElGVAkweDAwMDAwMDE4CS8qIFBlcmlvZGljIFRpbWVyIEEgcGVyaW9kIHNoaWZ0CSovCiAjZGVmaW5lIE1BTVJfUFRBRQkweDAwODAwMDAwCS8qIFBlcmlvZGljIFRpbWVyIEEgRW5hYmxlCQkqLwogI2RlZmluZSBNQU1SX0FNQV9NU0sJMHgwMDcwMDAwMAkvKiBBZGRlc3MgTXVsdGlwbGV4aW5nIHNpemUgQQkJKi8KQEAgLTI4MCwxNyArMjgwLDE3IEBACiAjZGVmaW5lIE1BTVJfRFNBXzJfQ1lDTCAweDAwMDIwMDAwCS8qIDIgY3ljbGUgRGlzYWJsZSBQZXJpb2QJCSovCiAjZGVmaW5lIE1BTVJfRFNBXzNfQ1lDTCAweDAwMDQwMDAwCS8qIDMgY3ljbGUgRGlzYWJsZSBQZXJpb2QJCSovCiAjZGVmaW5lIE1BTVJfRFNBXzRfQ1lDTCAweDAwMDYwMDAwCS8qIDQgY3ljbGUgRGlzYWJsZSBQZXJpb2QJCSovCi0jZGVmaW5lIE1BTVJfRzBDTEFfTVNLCTB4MDAwMGUwMDAJLyogR2VuZXJhbCBMaW5lIDAgQ29udHJvbCBBCQkqLworI2RlZmluZSBNQU1SX0cwQ0xBX01TSwkweDAwMDBFMDAwCS8qIEdlbmVyYWwgTGluZSAwIENvbnRyb2wgQQkJKi8KICNkZWZpbmUgTUFNUl9HMENMQV9BMTIJMHgwMDAwMDAwMAkvKiBHZW5lcmFsIExpbmUgMCA6IEExMgkJCSovCiAjZGVmaW5lIE1BTVJfRzBDTEFfQTExCTB4MDAwMDIwMDAJLyogR2VuZXJhbCBMaW5lIDAgOiBBMTEJCQkqLwogI2RlZmluZSBNQU1SX0cwQ0xBX0ExMAkweDAwMDA0MDAwCS8qIEdlbmVyYWwgTGluZSAwIDogQTEwCQkJKi8KICNkZWZpbmUgTUFNUl9HMENMQV9BOQkweDAwMDA2MDAwCS8qIEdlbmVyYWwgTGluZSAwIDogQTkJCQkqLwogI2RlZmluZSBNQU1SX0cwQ0xBX0E4CTB4MDAwMDgwMDAJLyogR2VuZXJhbCBMaW5lIDAgOiBBOAkJCSovCi0jZGVmaW5lIE1BTVJfRzBDTEFfQTcJMHgwMDAwYTAwMAkvKiBHZW5lcmFsIExpbmUgMCA6IEE3CQkJKi8KLSNkZWZpbmUgTUFNUl9HMENMQV9BNgkweDAwMDBjMDAwCS8qIEdlbmVyYWwgTGluZSAwIDogQTYJCQkqLwotI2RlZmluZSBNQU1SX0cwQ0xBX0E1CTB4MDAwMGUwMDAJLyogR2VuZXJhbCBMaW5lIDAgOiBBNQkJCSovCisjZGVmaW5lIE1BTVJfRzBDTEFfQTcJMHgwMDAwQTAwMAkvKiBHZW5lcmFsIExpbmUgMCA6IEE3CQkJKi8KKyNkZWZpbmUgTUFNUl9HMENMQV9BNgkweDAwMDBDMDAwCS8qIEdlbmVyYWwgTGluZSAwIDogQTYJCQkqLworI2RlZmluZSBNQU1SX0cwQ0xBX0E1CTB4MDAwMEUwMDAJLyogR2VuZXJhbCBMaW5lIDAgOiBBNQkJCSovCiAjZGVmaW5lIE1BTVJfR1BMX0E0RElTCTB4MDAwMDEwMDAJLyogR1BMX0E0IG91cHV0IGxpbmUgRGlzYWJsZQkJKi8KLSNkZWZpbmUgTUFNUl9STEZBX01TSwkweDAwMDAwZjAwCS8qIFJlYWQgTG9vcCBGaWVsZCBBIG1hc2sJCSovCisjZGVmaW5lIE1BTVJfUkxGQV9NU0sJMHgwMDAwMEYwMAkvKiBSZWFkIExvb3AgRmllbGQgQSBtYXNrCQkqLwogI2RlZmluZSBNQU1SX1JMRkFfMVgJMHgwMDAwMDEwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDEgdGltZQkqLwogI2RlZmluZSBNQU1SX1JMRkFfMlgJMHgwMDAwMDIwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDIgdGltZXMJKi8KICNkZWZpbmUgTUFNUl9STEZBXzNYCTB4MDAwMDAzMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAzIHRpbWVzCSovCkBAIC0zMDAsMTQgKzMwMCwxNCBAQAogI2RlZmluZSBNQU1SX1JMRkFfN1gJMHgwMDAwMDcwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDcgdGltZXMJKi8KICNkZWZpbmUgTUFNUl9STEZBXzhYCTB4MDAwMDA4MDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCA4IHRpbWVzCSovCiAjZGVmaW5lIE1BTVJfUkxGQV85WAkweDAwMDAwOTAwCS8qIFRoZSBSZWFkIExvb3AgaXMgZXhlY3V0ZWQgOSB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1JMRkFfMTBYCTB4MDAwMDBhMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxMCB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1JMRkFfMTFYCTB4MDAwMDBiMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxMSB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1JMRkFfMTJYCTB4MDAwMDBjMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxMiB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1JMRkFfMTNYCTB4MDAwMDBkMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxMyB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1JMRkFfMTRYCTB4MDAwMDBlMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxNCB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1JMRkFfMTVYCTB4MDAwMDBmMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxNSB0aW1lcwkqLworI2RlZmluZSBNQU1SX1JMRkFfMTBYCTB4MDAwMDBBMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxMCB0aW1lcwkqLworI2RlZmluZSBNQU1SX1JMRkFfMTFYCTB4MDAwMDBCMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxMSB0aW1lcwkqLworI2RlZmluZSBNQU1SX1JMRkFfMTJYCTB4MDAwMDBDMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxMiB0aW1lcwkqLworI2RlZmluZSBNQU1SX1JMRkFfMTNYCTB4MDAwMDBEMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxMyB0aW1lcwkqLworI2RlZmluZSBNQU1SX1JMRkFfMTRYCTB4MDAwMDBFMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxNCB0aW1lcwkqLworI2RlZmluZSBNQU1SX1JMRkFfMTVYCTB4MDAwMDBGMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxNSB0aW1lcwkqLwogI2RlZmluZSBNQU1SX1JMRkFfMTZYCTB4MDAwMDAwMDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCAxNiB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1dMRkFfTVNLCTB4MDAwMDAwZjAJLyogV3JpdGUgTG9vcCBGaWVsZCBBIG1hc2sJCSovCisjZGVmaW5lIE1BTVJfV0xGQV9NU0sJMHgwMDAwMDBGMAkvKiBXcml0ZSBMb29wIEZpZWxkIEEgbWFzawkJKi8KICNkZWZpbmUgTUFNUl9XTEZBXzFYCTB4MDAwMDAwMTAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMSB0aW1lCSovCiAjZGVmaW5lIE1BTVJfV0xGQV8yWAkweDAwMDAwMDIwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDIgdGltZXMJKi8KICNkZWZpbmUgTUFNUl9XTEZBXzNYCTB4MDAwMDAwMzAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMyB0aW1lcwkqLwpAQCAtMzE3LDE0ICszMTcsMTQgQEAKICNkZWZpbmUgTUFNUl9XTEZBXzdYCTB4MDAwMDAwNzAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgNyB0aW1lcwkqLwogI2RlZmluZSBNQU1SX1dMRkFfOFgJMHgwMDAwMDA4MAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCA4IHRpbWVzCSovCiAjZGVmaW5lIE1BTVJfV0xGQV85WAkweDAwMDAwMDkwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDkgdGltZXMJKi8KLSNkZWZpbmUgTUFNUl9XTEZBXzEwWAkweDAwMDAwMGEwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDEwIHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfV0xGQV8xMVgJMHgwMDAwMDBiMAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCAxMSB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1dMRkFfMTJYCTB4MDAwMDAwYzAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMTIgdGltZXMJKi8KLSNkZWZpbmUgTUFNUl9XTEZBXzEzWAkweDAwMDAwMGQwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDEzIHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfV0xGQV8xNFgJMHgwMDAwMDBlMAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCAxNCB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1dMRkFfMTVYCTB4MDAwMDAwZjAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMTUgdGltZXMJKi8KKyNkZWZpbmUgTUFNUl9XTEZBXzEwWAkweDAwMDAwMEEwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDEwIHRpbWVzCSovCisjZGVmaW5lIE1BTVJfV0xGQV8xMVgJMHgwMDAwMDBCMAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCAxMSB0aW1lcwkqLworI2RlZmluZSBNQU1SX1dMRkFfMTJYCTB4MDAwMDAwQzAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMTIgdGltZXMJKi8KKyNkZWZpbmUgTUFNUl9XTEZBXzEzWAkweDAwMDAwMEQwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDEzIHRpbWVzCSovCisjZGVmaW5lIE1BTVJfV0xGQV8xNFgJMHgwMDAwMDBFMAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCAxNCB0aW1lcwkqLworI2RlZmluZSBNQU1SX1dMRkFfMTVYCTB4MDAwMDAwRjAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMTUgdGltZXMJKi8KICNkZWZpbmUgTUFNUl9XTEZBXzE2WAkweDAwMDAwMDAwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDE2IHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfVExGQV9NU0sJMHgwMDAwMDAwZgkvKiBUaW1lciBMb29wIEZpZWxkIEEgbWFzawkJKi8KKyNkZWZpbmUgTUFNUl9UTEZBX01TSwkweDAwMDAwMDBGCS8qIFRpbWVyIExvb3AgRmllbGQgQSBtYXNrCQkqLwogI2RlZmluZSBNQU1SX1RMRkFfMVgJMHgwMDAwMDAwMQkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAxIHRpbWUJKi8KICNkZWZpbmUgTUFNUl9UTEZBXzJYCTB4MDAwMDAwMDIJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgMiB0aW1lcwkqLwogI2RlZmluZSBNQU1SX1RMRkFfM1gJMHgwMDAwMDAwMwkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAzIHRpbWVzCSovCkBAIC0zMzQsMTggKzMzNCwxOCBAQAogI2RlZmluZSBNQU1SX1RMRkFfN1gJMHgwMDAwMDAwNwkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCA3IHRpbWVzCSovCiAjZGVmaW5lIE1BTVJfVExGQV84WAkweDAwMDAwMDA4CS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDggdGltZXMJKi8KICNkZWZpbmUgTUFNUl9UTEZBXzlYCTB4MDAwMDAwMDkJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgOSB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1RMRkFfMTBYCTB4MDAwMDAwMGEJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgMTAgdGltZXMJKi8KLSNkZWZpbmUgTUFNUl9UTEZBXzExWAkweDAwMDAwMDBiCS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDExIHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfVExGQV8xMlgJMHgwMDAwMDAwYwkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAxMiB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1RMRkFfMTNYCTB4MDAwMDAwMGQJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgMTMgdGltZXMJKi8KLSNkZWZpbmUgTUFNUl9UTEZBXzE0WAkweDAwMDAwMDBlCS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDE0IHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfVExGQV8xNVgJMHgwMDAwMDAwZgkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAxNSB0aW1lcwkqLworI2RlZmluZSBNQU1SX1RMRkFfMTBYCTB4MDAwMDAwMEEJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgMTAgdGltZXMJKi8KKyNkZWZpbmUgTUFNUl9UTEZBXzExWAkweDAwMDAwMDBCCS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDExIHRpbWVzCSovCisjZGVmaW5lIE1BTVJfVExGQV8xMlgJMHgwMDAwMDAwQwkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAxMiB0aW1lcwkqLworI2RlZmluZSBNQU1SX1RMRkFfMTNYCTB4MDAwMDAwMEQJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgMTMgdGltZXMJKi8KKyNkZWZpbmUgTUFNUl9UTEZBXzE0WAkweDAwMDAwMDBFCS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDE0IHRpbWVzCSovCisjZGVmaW5lIE1BTVJfVExGQV8xNVgJMHgwMDAwMDAwRgkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAxNSB0aW1lcwkqLwogI2RlZmluZSBNQU1SX1RMRkFfMTZYCTB4MDAwMDAwMDAJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgMTYgdGltZXMJKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogTWFjaGluZSBCIE1vZGUgUmVnaXN0ZXIJCQkJCQkxNi0xMwogICovCi0jZGVmaW5lIE1BTVJfUFRCX01TSwkweGZmMDAwMDAwCS8qIFBlcmlvZGljIFRpbWVyIEIgcGVyaW9kIG1hc2sJCSovCisjZGVmaW5lIE1BTVJfUFRCX01TSwkweEZGMDAwMDAwCS8qIFBlcmlvZGljIFRpbWVyIEIgcGVyaW9kIG1hc2sJCSovCiAjZGVmaW5lIE1BTVJfUFRCX1NISUZUCTB4MDAwMDAwMTgJLyogUGVyaW9kaWMgVGltZXIgQiBwZXJpb2Qgc2hpZnQJKi8KICNkZWZpbmUgTUFNUl9QVEJFCTB4MDA4MDAwMDAJLyogUGVyaW9kaWMgVGltZXIgQiBFbmFibGUJCSovCiAjZGVmaW5lIE1BTVJfQU1CX01TSwkweDAwNzAwMDAwCS8qIEFkZGVzcyBNdWx0aXBsZXggc2l6ZSBCCQkqLwpAQCAtMzYwLDE3ICszNjAsMTcgQEAKICNkZWZpbmUgTUFNUl9EU0JfMl9DWUNMIDB4MDAwMjAwMDAJLyogMiBjeWNsZSBEaXNhYmxlIFBlcmlvZAkJKi8KICNkZWZpbmUgTUFNUl9EU0JfM19DWUNMIDB4MDAwNDAwMDAJLyogMyBjeWNsZSBEaXNhYmxlIFBlcmlvZAkJKi8KICNkZWZpbmUgTUFNUl9EU0JfNF9DWUNMIDB4MDAwNjAwMDAJLyogNCBjeWNsZSBEaXNhYmxlIFBlcmlvZAkJKi8KLSNkZWZpbmUgTUFNUl9HMENMQl9NU0sJMHgwMDAwZTAwMAkvKiBHZW5lcmFsIExpbmUgMCBDb250cm9sIEIJCSovCisjZGVmaW5lIE1BTVJfRzBDTEJfTVNLCTB4MDAwMEUwMDAJLyogR2VuZXJhbCBMaW5lIDAgQ29udHJvbCBCCQkqLwogI2RlZmluZSBNQU1SX0cwQ0xCX0ExMgkweDAwMDAwMDAwCS8qIEdlbmVyYWwgTGluZSAwIDogQTEyCQkJKi8KICNkZWZpbmUgTUFNUl9HMENMQl9BMTEJMHgwMDAwMjAwMAkvKiBHZW5lcmFsIExpbmUgMCA6IEExMQkJCSovCiAjZGVmaW5lIE1BTVJfRzBDTEJfQTEwCTB4MDAwMDQwMDAJLyogR2VuZXJhbCBMaW5lIDAgOiBBMTAJCQkqLwogI2RlZmluZSBNQU1SX0cwQ0xCX0E5CTB4MDAwMDYwMDAJLyogR2VuZXJhbCBMaW5lIDAgOiBBOQkJCSovCiAjZGVmaW5lIE1BTVJfRzBDTEJfQTgJMHgwMDAwODAwMAkvKiBHZW5lcmFsIExpbmUgMCA6IEE4CQkJKi8KLSNkZWZpbmUgTUFNUl9HMENMQl9BNwkweDAwMDBhMDAwCS8qIEdlbmVyYWwgTGluZSAwIDogQTcJCQkqLwotI2RlZmluZSBNQU1SX0cwQ0xCX0E2CTB4MDAwMGIwMDAJLyogR2VuZXJhbCBMaW5lIDAgOiBBNgkJCSovCi0jZGVmaW5lIE1BTVJfRzBDTEJfQTUJMHgwMDAwZTAwMAkvKiBHZW5lcmFsIExpbmUgMCA6IEE1CQkJKi8KKyNkZWZpbmUgTUFNUl9HMENMQl9BNwkweDAwMDBBMDAwCS8qIEdlbmVyYWwgTGluZSAwIDogQTcJCQkqLworI2RlZmluZSBNQU1SX0cwQ0xCX0E2CTB4MDAwMEMwMDAJLyogR2VuZXJhbCBMaW5lIDAgOiBBNgkJCSovCisjZGVmaW5lIE1BTVJfRzBDTEJfQTUJMHgwMDAwRTAwMAkvKiBHZW5lcmFsIExpbmUgMCA6IEE1CQkJKi8KICNkZWZpbmUgTUFNUl9HUExfQjRESVMJMHgwMDAwMTAwMAkvKiBHUExfQjQgb3VwdXQgbGluZSBEaXNhYmxlCQkqLwotI2RlZmluZSBNQU1SX1JMRkJfTVNLCTB4MDAwMDBmMDAJLyogUmVhZCBMb29wIEZpZWxkIEIgbWFzawkJKi8KKyNkZWZpbmUgTUFNUl9STEZCX01TSwkweDAwMDAwRjAwCS8qIFJlYWQgTG9vcCBGaWVsZCBCIG1hc2sJCSovCiAjZGVmaW5lIE1BTVJfUkxGQl8xWAkweDAwMDAwMTAwCS8qIFRoZSBSZWFkIExvb3AgaXMgZXhlY3V0ZWQgMSB0aW1lCSovCiAjZGVmaW5lIE1BTVJfUkxGQl8yWAkweDAwMDAwMjAwCS8qIFRoZSBSZWFkIExvb3AgaXMgZXhlY3V0ZWQgMiB0aW1lcwkqLwogI2RlZmluZSBNQU1SX1JMRkJfM1gJMHgwMDAwMDMwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDMgdGltZXMJKi8KQEAgLTM4MCwxNCArMzgwLDE0IEBACiAjZGVmaW5lIE1BTVJfUkxGQl83WAkweDAwMDAwNzAwCS8qIFRoZSBSZWFkIExvb3AgaXMgZXhlY3V0ZWQgNyB0aW1lcwkqLwogI2RlZmluZSBNQU1SX1JMRkJfOFgJMHgwMDAwMDgwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDggdGltZXMJKi8KICNkZWZpbmUgTUFNUl9STEZCXzlYCTB4MDAwMDA5MDAJLyogVGhlIFJlYWQgTG9vcCBpcyBleGVjdXRlZCA5IHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfUkxGQl8xMFgJMHgwMDAwMGEwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDEwIHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfUkxGQl8xMVgJMHgwMDAwMGIwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDExIHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfUkxGQl8xMlgJMHgwMDAwMGMwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDEyIHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfUkxGQl8xM1gJMHgwMDAwMGQwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDEzIHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfUkxGQl8xNFgJMHgwMDAwMGUwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDE0IHRpbWVzCSovCisjZGVmaW5lIE1BTVJfUkxGQl8xMFgJMHgwMDAwMEEwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDEwIHRpbWVzCSovCisjZGVmaW5lIE1BTVJfUkxGQl8xMVgJMHgwMDAwMEIwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDExIHRpbWVzCSovCisjZGVmaW5lIE1BTVJfUkxGQl8xMlgJMHgwMDAwMEMwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDEyIHRpbWVzCSovCisjZGVmaW5lIE1BTVJfUkxGQl8xM1gJMHgwMDAwMEQwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDEzIHRpbWVzCSovCisjZGVmaW5lIE1BTVJfUkxGQl8xNFgJMHgwMDAwMEUwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDE0IHRpbWVzCSovCiAjZGVmaW5lIE1BTVJfUkxGQl8xNVgJMHgwMDAwMGYwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDE1IHRpbWVzCSovCiAjZGVmaW5lIE1BTVJfUkxGQl8xNlgJMHgwMDAwMDAwMAkvKiBUaGUgUmVhZCBMb29wIGlzIGV4ZWN1dGVkIDE2IHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfV0xGQl9NU0sJMHgwMDAwMDBmMAkvKiBXcml0ZSBMb29wIEZpZWxkIEIgbWFzawkJKi8KKyNkZWZpbmUgTUFNUl9XTEZCX01TSwkweDAwMDAwMEYwCS8qIFdyaXRlIExvb3AgRmllbGQgQiBtYXNrCQkqLwogI2RlZmluZSBNQU1SX1dMRkJfMVgJMHgwMDAwMDAxMAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCAxIHRpbWUJKi8KICNkZWZpbmUgTUFNUl9XTEZCXzJYCTB4MDAwMDAwMjAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMiB0aW1lcwkqLwogI2RlZmluZSBNQU1SX1dMRkJfM1gJMHgwMDAwMDAzMAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCAzIHRpbWVzCSovCkBAIC0zOTcsMTQgKzM5NywxNCBAQAogI2RlZmluZSBNQU1SX1dMRkJfN1gJMHgwMDAwMDA3MAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCA3IHRpbWVzCSovCiAjZGVmaW5lIE1BTVJfV0xGQl84WAkweDAwMDAwMDgwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDggdGltZXMJKi8KICNkZWZpbmUgTUFNUl9XTEZCXzlYCTB4MDAwMDAwOTAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgOSB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1dMRkJfMTBYCTB4MDAwMDAwYTAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMTAgdGltZXMJKi8KLSNkZWZpbmUgTUFNUl9XTEZCXzExWAkweDAwMDAwMGIwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDExIHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfV0xGQl8xMlgJMHgwMDAwMDBjMAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCAxMiB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1dMRkJfMTNYCTB4MDAwMDAwZDAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMTMgdGltZXMJKi8KLSNkZWZpbmUgTUFNUl9XTEZCXzE0WAkweDAwMDAwMGUwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDE0IHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfV0xGQl8xNVgJMHgwMDAwMDBmMAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCAxNSB0aW1lcwkqLworI2RlZmluZSBNQU1SX1dMRkJfMTBYCTB4MDAwMDAwQTAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMTAgdGltZXMJKi8KKyNkZWZpbmUgTUFNUl9XTEZCXzExWAkweDAwMDAwMEIwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDExIHRpbWVzCSovCisjZGVmaW5lIE1BTVJfV0xGQl8xMlgJMHgwMDAwMDBDMAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCAxMiB0aW1lcwkqLworI2RlZmluZSBNQU1SX1dMRkJfMTNYCTB4MDAwMDAwRDAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMTMgdGltZXMJKi8KKyNkZWZpbmUgTUFNUl9XTEZCXzE0WAkweDAwMDAwMEUwCS8qIFRoZSBXcml0ZSBMb29wIGlzIGV4ZWN1dGVkIDE0IHRpbWVzCSovCisjZGVmaW5lIE1BTVJfV0xGQl8xNVgJMHgwMDAwMDBGMAkvKiBUaGUgV3JpdGUgTG9vcCBpcyBleGVjdXRlZCAxNSB0aW1lcwkqLwogI2RlZmluZSBNQU1SX1dMRkJfMTZYCTB4MDAwMDAwMDAJLyogVGhlIFdyaXRlIExvb3AgaXMgZXhlY3V0ZWQgMTYgdGltZXMJKi8KLSNkZWZpbmUgTUFNUl9UTEZCX01TSwkweDAwMDAwMDBmCS8qIFRpbWVyIExvb3AgRmllbGQgQiBtYXNrCQkqLworI2RlZmluZSBNQU1SX1RMRkJfTVNLCTB4MDAwMDAwMEYJLyogVGltZXIgTG9vcCBGaWVsZCBCIG1hc2sJCSovCiAjZGVmaW5lIE1BTVJfVExGQl8xWAkweDAwMDAwMDAxCS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDEgdGltZQkqLwogI2RlZmluZSBNQU1SX1RMRkJfMlgJMHgwMDAwMDAwMgkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAyIHRpbWVzCSovCiAjZGVmaW5lIE1BTVJfVExGQl8zWAkweDAwMDAwMDAzCS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDMgdGltZXMJKi8KQEAgLTQxNCwxMiArNDE0LDEyIEBACiAjZGVmaW5lIE1BTVJfVExGQl83WAkweDAwMDAwMDA3CS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDcgdGltZXMJKi8KICNkZWZpbmUgTUFNUl9UTEZCXzhYCTB4MDAwMDAwMDgJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgOCB0aW1lcwkqLwogI2RlZmluZSBNQU1SX1RMRkJfOVgJMHgwMDAwMDAwOQkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCA5IHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfVExGQl8xMFgJMHgwMDAwMDAwYQkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAxMCB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1RMRkJfMTFYCTB4MDAwMDAwMGIJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgMTEgdGltZXMJKi8KLSNkZWZpbmUgTUFNUl9UTEZCXzEyWAkweDAwMDAwMDBjCS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDEyIHRpbWVzCSovCi0jZGVmaW5lIE1BTVJfVExGQl8xM1gJMHgwMDAwMDAwZAkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAxMyB0aW1lcwkqLwotI2RlZmluZSBNQU1SX1RMRkJfMTRYCTB4MDAwMDAwMGUJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgMTQgdGltZXMJKi8KLSNkZWZpbmUgTUFNUl9UTEZCXzE1WAkweDAwMDAwMDBmCS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDE1IHRpbWVzCSovCisjZGVmaW5lIE1BTVJfVExGQl8xMFgJMHgwMDAwMDAwQQkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAxMCB0aW1lcwkqLworI2RlZmluZSBNQU1SX1RMRkJfMTFYCTB4MDAwMDAwMEIJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgMTEgdGltZXMJKi8KKyNkZWZpbmUgTUFNUl9UTEZCXzEyWAkweDAwMDAwMDBDCS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDEyIHRpbWVzCSovCisjZGVmaW5lIE1BTVJfVExGQl8xM1gJMHgwMDAwMDAwRAkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAxMyB0aW1lcwkqLworI2RlZmluZSBNQU1SX1RMRkJfMTRYCTB4MDAwMDAwMEUJLyogVGhlIFRpbWVyIExvb3AgaXMgZXhlY3V0ZWQgMTQgdGltZXMJKi8KKyNkZWZpbmUgTUFNUl9UTEZCXzE1WAkweDAwMDAwMDBGCS8qIFRoZSBUaW1lciBMb29wIGlzIGV4ZWN1dGVkIDE1IHRpbWVzCSovCiAjZGVmaW5lIE1BTVJfVExGQl8xNlgJMHgwMDAwMDAwMAkvKiBUaGUgVGltZXIgTG9vcCBpcyBleGVjdXRlZCAxNiB0aW1lcwkqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NDYsMTMgKzQ0NiwxMyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVGltZXIgTW9kZSBSZWdpc3RlcgkJCQkJCQkxOC05CiAgKi8KLSNkZWZpbmUgVE1SX1BTX01TSyAgICAgICAgICAgICAgMHhmZjAwICAvKiBQcmVzY2FsZXIgVmFsdWUgCQkJKi8KKyNkZWZpbmUgVE1SX1BTX01TSyAgICAgICAgICAgICAgMHhGRjAwICAvKiBQcmVzY2FsZXIgVmFsdWUgCQkJKi8KICNkZWZpbmUgVE1SX1BTX1NISUZUICAgICAgICAgICAgICAgICA4ICAvKiBQcmVzY2FsZXIgcG9zaXRpb24JCQkqLwotI2RlZmluZSBUTVJfQ0VfTVNLICAgICAgICAgICAgICAweDAwYzAgIC8qIENhcHR1cmUgRWRnZSBhbmQgRW5hYmxlIEludGVycnVwdAkqLworI2RlZmluZSBUTVJfQ0VfTVNLICAgICAgICAgICAgICAweDAwQzAgIC8qIENhcHR1cmUgRWRnZSBhbmQgRW5hYmxlIEludGVycnVwdAkqLwogI2RlZmluZSBUTVJfQ0VfSU5UUl9ESVMgICAgICAgICAweDAwMDAgIC8qIERpc2FibGUgSW50ZXJydXB0IG9uIGNhcHR1cmUgZXZlbnQgCSovCiAjZGVmaW5lIFRNUl9DRV9SSVNJTkcgICAgICAgICAgIDB4MDA0MCAgLyogQ2FwdHVyZSBvbiBSaXNpbmcgVElOeCBlZGdlIG9ubHkgCSovCiAjZGVmaW5lIFRNUl9DRV9GQUxMSU5HICAgICAgICAgIDB4MDA4MCAgLyogQ2FwdHVyZSBvbiBGYWxsaW5nIFRJTnggZWRnZSBvbmx5IAkqLwotI2RlZmluZSBUTVJfQ0VfQU5ZICAgICAgICAgICAgICAweDAwYzAgIC8qIENhcHR1cmUgb24gYW55IFRJTnggZWRnZSAJCSovCisjZGVmaW5lIFRNUl9DRV9BTlkgICAgICAgICAgICAgIDB4MDBDMCAgLyogQ2FwdHVyZSBvbiBhbnkgVElOeCBlZGdlIAkJKi8KICNkZWZpbmUgVE1SX09NICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBPdXRwdXQgTW9kZSAJCQkJKi8KICNkZWZpbmUgVE1SX09SSSAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBPdXRwdXQgUmVmZXJlbmNlIEludGVycnVwdCBFbmFibGUJKi8KICNkZWZpbmUgVE1SX0ZSUiAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBGcmVlIFJ1bi9SZXN0YXJ0IAkJCSovCkBAIC01MDUsNyArNTA1LDcgQEAKIAogI2RlZmluZSBQQ01DSUFfVlMxKHNsb3QpCSgweDgwMDAwMDAwID4+IChzbG90IDw8IDQpKQogI2RlZmluZSBQQ01DSUFfVlMyKHNsb3QpCSgweDQwMDAwMDAwID4+IChzbG90IDw8IDQpKQotI2RlZmluZSBQQ01DSUFfVlNfTUFTSyhzbG90KQkoMHhjMDAwMDAwMCA+PiAoc2xvdCA8PCA0KSkKKyNkZWZpbmUgUENNQ0lBX1ZTX01BU0soc2xvdCkJKDB4QzAwMDAwMDAgPj4gKHNsb3QgPDwgNCkpCiAjZGVmaW5lIFBDTUNJQV9WU19TSElGVChzbG90KQkoMzAgLSAoc2xvdCA8PCA0KSkKIAogI2RlZmluZSBQQ01DSUFfV1Aoc2xvdCkJCSgweDIwMDAwMDAwID4+IChzbG90IDw8IDQpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY2lfaWRzLmggYi9pbmNsdWRlL3BjaV9pZHMuaAppbmRleCBmNGZjNTJmLi4yZWE0ODk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL3BjaV9pZHMuaApAQCAtMTM2Nyw2ICsxMzY3LDE5IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MzAJMHgwNDg2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MzQJMHgwNGEzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSTk2MAkweDA5NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU0MiAgICAgICAJMHgxMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NDNHQ19GSUJFUiAgCTB4MTAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTQzR0NfQ09QUEVSIAkweDEwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU0NEVJX0NPUFBFUiAJMHgxMDA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NDRFSV9GSUJFUiAJMHgxMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NDRHQ19DT1BQRVIgCTB4MTAwQworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTQ0R0NfTE9NICAgCTB4MTAwRAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTQwRU0JCTB4MTAwRQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTQ1RU1fQ09QUEVSCTB4MTAwRgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTQ2RUJfQ09QUEVSCTB4MTAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTQ1RU1fRklCRVIJMHgxMDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NDZFQl9GSUJFUgkweDEwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU0MEVNX0xPTQkJMHgxMDE1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NTkJMHgxMDMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NTlFUgkweDEyMDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjA5MkFBXzAJMHgxMjIxCmRpZmYgLS1naXQgYS9pbmNsdWRlL3N0YXR1c19sZWQuaCBiL2luY2x1ZGUvc3RhdHVzX2xlZC5oCmluZGV4IDBkNWE1NmUuLmMxZmI3ZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc3RhdHVzX2xlZC5oCisrKyBiL2luY2x1ZGUvc3RhdHVzX2xlZC5oCkBAIC0yOTYsNiArMjk2LDI1IEBACiAKICMgZGVmaW5lIFNUQVRVU19MRURfQk9PVCAgICAgICAgMCAgICAgICAgICAgICAgIC8qIExFRCAwIHVzZWQgZm9yIGJvb3Qgc3RhdHVzICovCiAKKy8qKioqKiAgUkJDODIzICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VsaWYgZGVmaW5lZChDT05GSUdfUkJDODIzKQorCisjIGRlZmluZSBTVEFUVVNfTEVEX1BBUiAgICAgICAgIGltX2lvcG9ydC5pb3BfcGNwYXIKKyMgZGVmaW5lIFNUQVRVU19MRURfRElSICAgICAgICAgaW1faW9wb3J0LmlvcF9wY2RpcgorIyAgdW5kZWYgU1RBVFVTX0xFRF9PRFIKKyMgZGVmaW5lIFNUQVRVU19MRURfREFUICAgICAgICAgaW1faW9wb3J0LmlvcF9wY2RhdAorCisjIGRlZmluZSBTVEFUVVNfTEVEX0JJVCAgICAgICAgIDB4MDAwMiAgICAgICAgICAvKiBMRUQgMCBpcyBvbiBQQy4xNCAqLworIyBkZWZpbmUgU1RBVFVTX0xFRF9QRVJJT0QgICAgICAoQ0ZHX0haIC8gMikKKyMgZGVmaW5lIFNUQVRVU19MRURfU1RBVEUgICAgICAgU1RBVFVTX0xFRF9CTElOS0lORworIyBkZWZpbmUgU1RBVFVTX0xFRF9CSVQxICAgICAgICAweDAwMDQgICAgICAgICAgLyogTEVEIDEgaXMgb24gUEMuMTMgKi8KKyMgZGVmaW5lIFNUQVRVU19MRURfUEVSSU9EMSAgICAgKENGR19IWikKKyMgZGVmaW5lIFNUQVRVU19MRURfU1RBVEUxICAgICAgU1RBVFVTX0xFRF9PRkYKKworIyBkZWZpbmUgU1RBVFVTX0xFRF9BQ1RJVkUgICAgICAxICAgICAgICAgICAgICAgLyogTEVEIG9uIGZvciBiaXQgPT0gMSAgKi8KKworIyBkZWZpbmUgU1RBVFVTX0xFRF9CT09UICAgICAgICAwICAgICAgICAgICAgICAgLyogTEVEIDAgdXNlZCBmb3IgYm9vdCBzdGF0dXMgKi8KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNlbHNlCiAjIGVycm9yIFN0YXR1cyBMRUQgY29uZmlndXJhdGlvbiBtaXNzaW5nCmRpZmYgLS1naXQgYS9saWJfcHBjL2JvYXJkLmMgYi9saWJfcHBjL2JvYXJkLmMKaW5kZXggMzMzZDJkMi4uNTZjYmRmZSAxMDA2NDQKLS0tIGEvbGliX3BwYy9ib2FyZC5jCisrKyBiL2xpYl9wcGMvYm9hcmQuYwpAQCAtNDM4LDEwICs0MzgsMTAgQEAKIAogCS8qCiAJICogcmVzZXJ2ZSBtZW1vcnkgZm9yIFUtQm9vdCBjb2RlLCBkYXRhICYgYnNzCi0JICogcm91bmQgZG93biB0byBuZXh0IDE2IGtCIGxpbWl0CisJICogcm91bmQgZG93biB0byBuZXh0IDQga0IgbGltaXQKIAkgKi8KIAlhZGRyIC09IGxlbjsKLQlhZGRyICY9IH4oMTYgKiAxMDI0IC0gMSk7CisJYWRkciAmPSB+KDQwOTYgLSAxKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRmICgiUmVzZXJ2aW5nICVsZGsgZm9yIFUtQm9vdCBhdDogJTA4bHhcbiIsIGxlbiA+PiAxMCwgYWRkcik7CmRpZmYgLS1naXQgYS9uZXQvYm9vdHAuYyBiL25ldC9ib290cC5jCmluZGV4IGY2ZDA4YTcuLjRiZTBhZDUgMTAwNjQ0Ci0tLSBhL25ldC9ib290cC5jCisrKyBiL25ldC9ib290cC5jCkBAIC01NSw3ICs1NSw3IEBACiAKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9ESENQKQogZGhjcF9zdGF0ZV90IGRoY3Bfc3RhdGUgPSBJTklUOwotdW5zaWduZWQgaW50IGRoY3BfbGVhc2V0aW1lID0gMDsKK3Vuc2lnbmVkIGxvbmcgZGhjcF9sZWFzZXRpbWUgPSAwOwogSVBhZGRyX3QgTmV0REhDUFNlcnZlcklQID0gMDsKIHN0YXRpYyB2b2lkIERoY3BIYW5kbGVyKHVjaGFyICogcGt0LCB1bnNpZ25lZCBkZXN0LCB1bnNpZ25lZCBzcmMsIHVuc2lnbmVkIGxlbik7CiAKQEAgLTcxMiw3ICs3MTIsNyBAQAogCQkJCU5ldE91clJvb3RQYXRoW3NpemVdID0gMCA7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDUxOgotCQkJCWRoY3BfbGVhc2V0aW1lID0gKih1bnNpZ25lZCBpbnQgKikocG9wdCArIDIpOworCQkJCU5ldENvcHlMb25nICgmZGhjcF9sZWFzZXRpbWUsICh1bG9uZyAqKShwb3B0ICsgMikpOwogCQkJCWJyZWFrOwogCQkJY2FzZSA1MzoJCS8qIElnbm9yZSBNZXNzYWdlIFR5cGUgT3B0aW9uICovCiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvZXRoLmMgYi9uZXQvZXRoLmMKaW5kZXggZTJkNjk5ZS4uMjJkMzNkYSAxMDA2NDQKLS0tIGEvbmV0L2V0aC5jCisrKyBiL25ldC9ldGguYwpAQCAtMzEsNiArMzEsNyBAQAogZXh0ZXJuIGludCBndDY0MjZ4X2V0aF9pbml0aWFsaXplKGJkX3QgKmJpcyk7CiAjZW5kaWYKIAorZXh0ZXJuIGludCBlMTAwMF9pbml0aWFsaXplKGJkX3QqKTsKIGV4dGVybiBpbnQgZWVwcm8xMDBfaW5pdGlhbGl6ZShiZF90Kik7CiBleHRlcm4gaW50IG5hdHNlbWlfaW5pdGlhbGl6ZShiZF90Kik7CiBleHRlcm4gaW50IG5zODM4MnhfaW5pdGlhbGl6ZShiZF90Kik7CkBAIC0xMDMsNiArMTA0LDkgQEAKICNpZmRlZiBDT05GSUdfUExCMjgwMF9FVEhFUgogCXBsYjI4MDBfZXRoX2luaXRpYWxpemUoYmlzKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19FMTAwMAorCWUxMDAwX2luaXRpYWxpemUoYmlzKTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19FRVBSTzEwMAogCWVlcHJvMTAwX2luaXRpYWxpemUoYmlzKTsKICNlbmRpZgo=