LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQogKgogKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogKiBwcm9qZWN0LgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogKiBNQSAwMjExMS0xMzA3IFVTQQogKi8KCiNpZm5kZWYgX0JJT1NfSF8KI2RlZmluZSBfQklPU19IXwoKI2RlZmluZSBPRkZTX0VTICAgICAgMCAgICAgLyogMTZiaXQgKi8KI2RlZmluZSBPRkZTX0dTICAgICAgMiAgICAgLyogMTZiaXQgKi8KI2RlZmluZSBPRkZTX0RTICAgICAgNCAgICAgLyogMTZiaXQgKi8KI2RlZmluZSBPRkZTX0VESSAgICAgNiAgICAgLyogMzJiaXQgKi8KI2RlZmluZSBPRkZTX0RJICAgICAgNiAgICAgLyogbG93IDE2IGJpdHMgb2YgRURJICovCiNkZWZpbmUgT0ZGU19FU0kgICAgIDEwICAgIC8qIDMyYml0ICovCiNkZWZpbmUgT0ZGU19TSSAgICAgIDEwICAgIC8qIGxvdyAxNiBiaXRzIG9mIEVTSSAqLwojZGVmaW5lIE9GRlNfRUJQICAgICAxNCAgICAvKiAzMmJpdCAqLwojZGVmaW5lIE9GRlNfQlAgICAgICAxNCAgICAvKiBsb3cgMTYgYml0cyBvZiBFQlAgKi8KI2RlZmluZSBPRkZTX0VTUCAgICAgMTggICAgLyogMzJiaXQgKi8KI2RlZmluZSBPRkZTX1NQICAgICAgMTggICAgLyogbG93IDE2IGJpdHMgb2YgRVNQICovCiNkZWZpbmUgT0ZGU19FQlggICAgIDIyICAgIC8qIDMyYml0ICovCiNkZWZpbmUgT0ZGU19CWCAgICAgIDIyICAgIC8qIGxvdyAxNiBiaXRzIG9mIEVCWCAqLwojZGVmaW5lIE9GRlNfQkwgICAgICAyMiAgICAvKiBsb3cgIDggYml0cyBvZiBCWCAqLwojZGVmaW5lIE9GRlNfQkggICAgICAyMyAgICAvKiBoaWdoIDggYml0cyBvZiBCWCAqLwojZGVmaW5lIE9GRlNfRURYICAgICAyNiAgICAvKiAzMmJpdCAqLwojZGVmaW5lIE9GRlNfRFggICAgICAyNiAgICAvKiBsb3cgMTYgYml0cyBvZiBFQlggKi8KI2RlZmluZSBPRkZTX0RMICAgICAgMjYgICAgLyogbG93ICA4IGJpdHMgb2YgQlggKi8KI2RlZmluZSBPRkZTX0RIICAgICAgMjcgICAgLyogaGlnaCA4IGJpdHMgb2YgQlggKi8KI2RlZmluZSBPRkZTX0VDWCAgICAgMzAgICAgLyogMzJiaXQgKi8KI2RlZmluZSBPRkZTX0NYICAgICAgMzAgICAgLyogbG93IDE2IGJpdHMgb2YgRUJYICovCiNkZWZpbmUgT0ZGU19DTCAgICAgIDMwICAgIC8qIGxvdyAgOCBiaXRzIG9mIEJYICovCiNkZWZpbmUgT0ZGU19DSCAgICAgIDMxICAgIC8qIGhpZ2ggOCBiaXRzIG9mIEJYICovCiNkZWZpbmUgT0ZGU19FQVggICAgIDM0ICAgIC8qIDMyYml0ICovCiNkZWZpbmUgT0ZGU19BWCAgICAgIDM0ICAgIC8qIGxvdyAxNiBiaXRzIG9mIEVCWCAqLwojZGVmaW5lIE9GRlNfQUwgICAgICAzNCAgICAvKiBsb3cgIDggYml0cyBvZiBCWCAqLwojZGVmaW5lIE9GRlNfQUggICAgICAzNSAgICAvKiBoaWdoIDggYml0cyBvZiBCWCAqLwojZGVmaW5lIE9GRlNfVkVDVE9SICAzOCAgICAvKiAxNmJpdCAqLwojZGVmaW5lIE9GRlNfSVAgICAgICA0MCAgICAvKiAxNmJpdCAqLwojZGVmaW5lIE9GRlNfQ1MgICAgICA0MiAgICAvKiAxNmJpdCAqLwojZGVmaW5lIE9GRlNfRkxBR1MgICA0NCAgICAvKiAxNmJpdCAqLwoKI2RlZmluZSBTRUdNRU5UICAgICAgMHg0MAojZGVmaW5lIFNUQUNLCSAgICAgMHg4MDAJCQkvKiBzdGFjayBhdCAweDQwOjB4ODAwIC0+IDB4ODAwICovCgovKiBzYXZlIGdlbmVyYWwgcmVnaXN0ZXJzICovCi8qIHNhdmUgc29tZSBzZWdtZW50cyAgICAgKi8KLyogc2F2ZSBjYWxsZXJzIHN0YWNrIHNlZ21lbnQgLi4gKi8KLyogLi4uIGluIGdzICovCgkvKiBzZXR1cCBteSBzZWdtZW50cyAqLwoJLyogc2V0dXAgQklPUyBzdGFja3BvaW50ZXIgKi8KCiNkZWZpbmUgTUFLRV9CSU9TX1NUQUNLIFwKCXB1c2hhbAkJOyBcCglwdXNodwklZHMJOyBcCglwdXNodwklZ3MJOyBcCglwdXNodwklZXMJOyBcCglwdXNodwklc3MJOyBcCglwb3B3CSVncwk7IFwKCW1vdncJJFNFR01FTlQsJWF4IDsgXAoJbW92dwklYXgsJWRzCTsgXAoJbW92dwklYXgsJWVzCTsgXAoJbW92dwklYXgsJXNzCTsgXAoJbW92dwklc3AsJWJwCTsgXAoJbW92dwkkU1RBQ0ssJXNwCgojZGVmaW5lIFJFU1RPUkVfQ0FMTEVSU19TVEFDSyBcCglwdXNodwklZ3MgICAgIDsJCQkvKiByZXN0b3JlIGNhbGxlcnMgc3RhY2sgc2VnbWVudCAqLyBcCglwb3B3CSVzcyAgICAgOyBcCgltb3Z3CSVicCwlc3AJOwkJCS8qIHJlc3RvcmUgc3RhY2twb2ludGVyICovIFwKCQlcCglwb3B3CSVlcwk7CQkJLyogcmVzdG9yZSBzZWdtZW50IHNlbGVjdG9ycyAqLyBcCglwb3B3CSVncyAgICAgOyBcCglwb3B3CSVkcyAgICAgOyBcCgkJXAoJcG9wYWwJCQkJCS8qIHJlc3RvcmUgR1AgcmVnaXN0ZXJzICovCgojZW5kaWYK