LyoKICogICAJaTJvX2xhbi5oCQkJSTJPIExBTiBDbGFzcyBkZWZpbml0aW9ucwogKgogKiAgICAgIEkyTyBMQU4gQ0xBU1MgT1NNICAgICAgIAlNYXkgMjZ0aCAyMDAwCiAqCiAqICAgICAgKEMpIENvcHlyaWdodCAxOTk5LCAyMDAwCVVuaXZlcnNpdHkgb2YgSGVsc2lua2ksCiAqCQkJCQlEZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UKICoKICogICAgICBUaGlzIGNvZGUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgLyB0ZXN0LgogKgogKglBdXRob3I6CQlBdXZvIEjka2tpbmVuIDxBdXZvLkhha2tpbmVuQGNzLkhlbHNpbmtpLkZJPgogKgkJCUp1aGEgU2llduRuZW4gPEp1aGEuU2lldmFuZW5AY3MuSGVsc2lua2kuRkk+CiAqCQkJVGFuZWxpIFbkaORrYW5nYXMgPFRhbmVsaS5WYWhha2FuZ2FzQGNzLkhlbHNpbmtpLkZJPgogKi8KCiNpZm5kZWYgX0kyT19MQU5fSAojZGVmaW5lIF9JMk9fTEFOX0gKCi8qIERlZmF1bHQgdmFsdWVzIGZvciB0dW5hYmxlIHBhcmFtZXRlcnMgZmlyc3QgKi8KCiNkZWZpbmUgSTJPX0xBTl9NQVhfQlVDS0VUU19PVVQgOTYKI2RlZmluZSBJMk9fTEFOX0JVQ0tFVF9USFJFU0gJMTgJLyogOSBidWNrZXRzIGluIG9uZSBtZXNzYWdlICovCiNkZWZpbmUgSTJPX0xBTl9SWF9DT1BZQlJFQUsJMjAwCiNkZWZpbmUgSTJPX0xBTl9UWF9USU1FT1VUIAkoMSpIWikKI2RlZmluZSBJMk9fTEFOX1RYX0JBVENIX01PREUJMgkvKiAyPWF1dG9tYXRpYywgMT1vbiwgMD1vZmYgKi8KI2RlZmluZSBJMk9fTEFOX0VWRU5UX01BU0sJMAkvKiAwPU5vbmUsIDB4RkZDMDAwMDI9QWxsICovCgovKiBMQU4gdHlwZXMgKi8KI2RlZmluZSBJMk9fTEFOX0VUSEVSTkVUCTB4MDAzMAojZGVmaW5lIEkyT19MQU5fMTAwVkcJCTB4MDA0MAojZGVmaW5lIEkyT19MQU5fVFIJCTB4MDA1MAojZGVmaW5lIEkyT19MQU5fRkRESQkJMHgwMDYwCiNkZWZpbmUgSTJPX0xBTl9GSUJSRV9DSEFOTkVMCTB4MDA3MAojZGVmaW5lIEkyT19MQU5fVU5LTk9XTgkJMHgwMDAwMDAwMAoKLyogQ29ubmVjdG9yIHR5cGVzICovCgovKiBFdGhlcm5ldCAqLwojZGVmaW5lIEkyT19MQU5fQVVJCQkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDEKI2RlZmluZSBJMk9fTEFOXzEwQkFTRTUJCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwMgojZGVmaW5lIEkyT19MQU5fRklPUkwJCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwMwojZGVmaW5lIEkyT19MQU5fMTBCQVNFMgkJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDA0CiNkZWZpbmUgSTJPX0xBTl8xMEJST0FEMzYJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDA1CiNkZWZpbmUgSTJPX0xBTl8xMEJBU0VfVAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDYKI2RlZmluZSBJMk9fTEFOXzEwQkFTRV9GUAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDcKI2RlZmluZSBJMk9fTEFOXzEwQkFTRV9GQgkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDgKI2RlZmluZSBJMk9fTEFOXzEwQkFTRV9GTAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDkKI2RlZmluZSBJMk9fTEFOXzEwMEJBU0VfVFgJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDBBCiNkZWZpbmUgSTJPX0xBTl8xMDBCQVNFX0ZYCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwQgojZGVmaW5lIEkyT19MQU5fMTAwQkFTRV9UNAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMEMKI2RlZmluZSBJMk9fTEFOXzEwMDBCQVNFX1NYCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwRAojZGVmaW5lIEkyT19MQU5fMTAwMEJBU0VfTFgJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDBFCiNkZWZpbmUgSTJPX0xBTl8xMDAwQkFTRV9DWAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMEYKI2RlZmluZSBJMk9fTEFOXzEwMDBCQVNFX1QJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDEwCgovKiBBbnlMQU4gKi8KI2RlZmluZSBJMk9fTEFOXzEwMFZHX0VUSEVSTkVUCShJMk9fTEFOXzEwMFZHIDw8IDQpICsgMHgwMDAwMDAwMQojZGVmaW5lIEkyT19MQU5fMTAwVkdfVFIJKEkyT19MQU5fMTAwVkcgPDwgNCkgKyAweDAwMDAwMDAyCgovKiBUb2tlbiBSaW5nICovCiNkZWZpbmUgSTJPX0xBTl80TUJJVAkJKEkyT19MQU5fVFIgPDwgNCkgKyAweDAwMDAwMDAxCiNkZWZpbmUgSTJPX0xBTl8xNk1CSVQJCShJMk9fTEFOX1RSIDw8IDQpICsgMHgwMDAwMDAwMgoKLyogRkRESSAqLwojZGVmaW5lIEkyT19MQU5fMTI1TUJBVUQJKEkyT19MQU5fRkRESSA8PCA0KSArIDB4MDAwMDAwMDEKCi8qIEZpYnJlIENoYW5uZWwgKi8KI2RlZmluZSBJMk9fTEFOX1BPSU5UX1BPSU5UCShJMk9fTEFOX0ZJQlJFX0NIQU5ORUwgPDwgNCkgKyAweDAwMDAwMDAxCiNkZWZpbmUgSTJPX0xBTl9BUkJfTE9PUAkoSTJPX0xBTl9GSUJSRV9DSEFOTkVMIDw8IDQpICsgMHgwMDAwMDAwMgojZGVmaW5lIEkyT19MQU5fUFVCTElDX0xPT1AJKEkyT19MQU5fRklCUkVfQ0hBTk5FTCA8PCA0KSArIDB4MDAwMDAwMDMKI2RlZmluZSBJMk9fTEFOX0ZBQlJJQwkJKEkyT19MQU5fRklCUkVfQ0hBTk5FTCA8PCA0KSArIDB4MDAwMDAwMDQKCiNkZWZpbmUgSTJPX0xBTl9FTVVMQVRJT04JMHgwMDAwMEYwMAojZGVmaW5lIEkyT19MQU5fT1RIRVIJCTB4MDAwMDBGMDEKI2RlZmluZSBJMk9fTEFOX0RFRkFVTFQJCTB4RkZGRkZGRkYKCi8qIExBTiBjbGFzcyBmdW5jdGlvbnMgKi8KCiNkZWZpbmUgTEFOX1BBQ0tFVF9TRU5ECQkweDNCCiNkZWZpbmUgTEFOX1NEVV9TRU5ECQkweDNECiNkZWZpbmUgTEFOX1JFQ0VJVkVfUE9TVAkweDNFCiNkZWZpbmUgTEFOX1JFU0VUCQkweDM1CiNkZWZpbmUgTEFOX1NVU1BFTkQJCTB4MzcKCi8qIExBTiBEZXRhaWxlZFN0YXR1c0NvZGUgZGVmaW5lcyAqLwojZGVmaW5lIEkyT19MQU5fRFNDX1NVQ0NFU1MJCQkweDAwCiNkZWZpbmUgSTJPX0xBTl9EU0NfREVWSUNFX0ZBSUxVUkUJCTB4MDEKI2RlZmluZSBJMk9fTEFOX0RTQ19ERVNUSU5BVElPTl9OT1RfRk9VTkQJMHgwMgojZGVmaW5lCUkyT19MQU5fRFNDX1RSQU5TTUlUX0VSUk9SCQkweDAzCiNkZWZpbmUgSTJPX0xBTl9EU0NfVFJBTlNNSVRfQUJPUlRFRAkJMHgwNAojZGVmaW5lIEkyT19MQU5fRFNDX1JFQ0VJVkVfRVJST1IJCTB4MDUKI2RlZmluZSBJMk9fTEFOX0RTQ19SRUNFSVZFX0FCT1JURUQJCTB4MDYKI2RlZmluZSBJMk9fTEFOX0RTQ19ETUFfRVJST1IJCQkweDA3CiNkZWZpbmUgSTJPX0xBTl9EU0NfQkFEX1BBQ0tFVF9ERVRFQ1RFRAkJMHgwOAojZGVmaW5lIEkyT19MQU5fRFNDX09VVF9PRl9NRU1PUlkJCTB4MDkKI2RlZmluZSBJMk9fTEFOX0RTQ19CVUNLRVRfT1ZFUlJVTgkJMHgwQQojZGVmaW5lIEkyT19MQU5fRFNDX0lPUF9JTlRFUk5BTF9FUlJPUgkJMHgwQgojZGVmaW5lIEkyT19MQU5fRFNDX0NBTkNFTEVECQkJMHgwQwojZGVmaW5lIEkyT19MQU5fRFNDX0lOVkFMSURfVFJBTlNBQ1RJT05fQ09OVEVYVAkweDBECiNkZWZpbmUgSTJPX0xBTl9EU0NfREVTVF9BRERSRVNTX0RFVEVDVEVECTB4MEUKI2RlZmluZSBJMk9fTEFOX0RTQ19ERVNUX0FERFJFU1NfT01JVFRFRAkweDBGCiNkZWZpbmUgSTJPX0xBTl9EU0NfUEFSVElBTF9QQUNLRVRfUkVUVVJORUQJMHgxMAojZGVmaW5lIEkyT19MQU5fRFNDX1NVU1BFTkRFRAkJCTB4MTEKCnN0cnVjdCBpMm9fcGFja2V0X2luZm8gewoJdTMyIG9mZnNldCA6IDI0OwoJdTMyIGZsYWdzICA6IDg7Cgl1MzIgbGVuICAgIDogMjQ7Cgl1MzIgc3RhdHVzIDogODsKfTsKCnN0cnVjdCBpMm9fYnVja2V0X2Rlc2NyaXB0b3IgewoJdTMyIGNvbnRleHQ7IAkJCS8qIEZJWE1FOiA2NGJpdCBzdXBwb3J0ICovCglzdHJ1Y3QgaTJvX3BhY2tldF9pbmZvIHBhY2tldF9pbmZvWzFdOwp9OwoKLyogRXZlbnQgSW5kaWNhdG9yIE1hc2sgRmxhZ3MgZm9yIExBTiBPU00gKi8KCiNkZWZpbmUgSTJPX0xBTl9FVlRfTElOS19ET1dOCQkweDAxCiNkZWZpbmUgSTJPX0xBTl9FVlRfTElOS19VUAkJMHgwMgojZGVmaW5lIEkyT19MQU5fRVZUX01FRElBX0NIQU5HRSAJMHgwNAoKI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgojaW5jbHVkZSA8bGludXgvZmRkaWRldmljZS5oPgoKc3RydWN0IGkyb19sYW5fbG9jYWwgewoJdTggdW5pdDsKCXN0cnVjdCBpMm9fZGV2aWNlICppMm9fZGV2OwoKCXN0cnVjdCBmZGRpX3N0YXRpc3RpY3Mgc3RhdHM7ICAgLyogc2VlIGFsc28gc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKi8KCXVuc2lnbmVkIHNob3J0ICgqdHlwZV90cmFucykoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CglhdG9taWNfdCBidWNrZXRzX291dDsgIAkJLyogbmJyIG9mIHVudXNlZCBidWNrZXRzIG9uIERETSAqLwoJYXRvbWljX3QgdHhfb3V0OwkJLyogb3V0c3RhbmRpbmcgVFhlcyAqLwoJdTggdHhfY291bnQ7ICAJCQkvKiBwYWNrZXRzIGluIG9uZSBUWCBtZXNzYWdlIGZyYW1lICovCgl1MTYgdHhfbWF4X291dDsJICAgCQkvKiBERE0ncyBUeCBxdWV1ZSBsZW4gKi8KCXU4IHNnbF9tYXg7CQkJLyogbWF4IFNHTHMgaW4gb25lIG1lc3NhZ2UgZnJhbWUgKi8KCXUzMiBtOwkJCQkvKiBJT1AgYWRkcmVzcyBvZiB0aGUgYmF0Y2ggbXNnIGZyYW1lICovCgoJc3RydWN0IHdvcmtfc3RydWN0IGkyb19iYXRjaF9zZW5kX3Rhc2s7CglpbnQgc2VuZF9hY3RpdmU7CglzdHJ1Y3Qgc2tfYnVmZiAqKmkyb19mYmw7CS8qIEZyZWUgYnVja2V0IGxpc3QgKHRvIHJldXNlIHNrYnMpICovCglpbnQgaTJvX2ZibF90YWlsOwoJc3BpbmxvY2tfdCBmYmxfbG9jazsKCglzcGlubG9ja190IHR4X2xvY2s7CgoJdTMyIG1heF9zaXplX21jX3RhYmxlOwkJLyogbWF4IG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzICovCgoJLyogTEFOIE9TTSBjb25maWd1cmFibGUgcGFyYW1ldGVycyBhcmUgaGVyZTogKi8KCgl1MTYgbWF4X2J1Y2tldHNfb3V0OwkJLyogbWF4IG5iciBvZiBidWNrZXRzIHRvIHNlbmQgdG8gRERNICovCgl1MTYgYnVja2V0X3RocmVzaDsJCS8qIHNlbmQgbW9yZSB3aGVuIHRoaXMgbWFueSB1c2VkICovCgl1MTYgcnhfY29weWJyZWFrOwoKCXU4ICB0eF9iYXRjaF9tb2RlOwkJLyogU2V0IHdoZW4gdXNpbmcgYmF0Y2ggbW9kZSBzZW5kcyAqLwoJdTMyIGkyb19ldmVudF9tYXNrOwkJLyogVG8gdHVybiBvbiBpbnRlcmVzdGluZyBldmVudCBmbGFncyAqLwp9OwoKI2VuZGlmIC8qIF9JMk9fTEFOX0ggKi8K