LyoKICogICAJaTJvX2xhbi5oCQkJSTJPIExBTiBDbGFzcyBkZWZpbml0aW9ucwogKgogKiAgICAgIEkyTyBMQU4gQ0xBU1MgT1NNICAgICAgIAlNYXkgMjZ0aCAyMDAwCiAqCiAqICAgICAgKEMpIENvcHlyaWdodCAxOTk5LCAyMDAwCVVuaXZlcnNpdHkgb2YgSGVsc2lua2ksCiAqCQkJCQlEZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UKICoKICogICAgICBUaGlzIGNvZGUgaXMgc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgLyB0ZXN0LgogKgogKglBdXRob3I6CQlBdXZvIEjka2tpbmVuIDxBdXZvLkhha2tpbmVuQGNzLkhlbHNpbmtpLkZJPgogKgkJCUp1aGEgU2llduRuZW4gPEp1aGEuU2lldmFuZW5AY3MuSGVsc2lua2kuRkk+CiAqCQkJVGFuZWxpIFbkaORrYW5nYXMgPFRhbmVsaS5WYWhha2FuZ2FzQGNzLkhlbHNpbmtpLkZJPgogKi8KCiNpZm5kZWYgX0kyT19MQU5fSAojZGVmaW5lIF9JMk9fTEFOX0gKCi8qIERlZmF1bHQgdmFsdWVzIGZvciB0dW5hYmxlIHBhcmFtZXRlcnMgZmlyc3QgKi8KCiNkZWZpbmUgSTJPX0xBTl9NQVhfQlVDS0VUU19PVVQgOTYKI2RlZmluZSBJMk9fTEFOX0JVQ0tFVF9USFJFU0gJMTgJLyogOSBidWNrZXRzIGluIG9uZSBtZXNzYWdlICovCiNkZWZpbmUgSTJPX0xBTl9SWF9DT1BZQlJFQUsJMjAwCiNkZWZpbmUgSTJPX0xBTl9UWF9USU1FT1VUIAkoMSpIWikKI2RlZmluZSBJMk9fTEFOX1RYX0JBVENIX01PREUJMgkvKiAyPWF1dG9tYXRpYywgMT1vbiwgMD1vZmYgKi8KI2RlZmluZSBJMk9fTEFOX0VWRU5UX01BU0sJMAkvKiAwPU5vbmUsIDB4RkZDMDAwMDI9QWxsICovCgovKiBMQU4gdHlwZXMgKi8KI2RlZmluZSBJMk9fTEFOX0VUSEVSTkVUCTB4MDAzMAojZGVmaW5lIEkyT19MQU5fMTAwVkcJCTB4MDA0MAojZGVmaW5lIEkyT19MQU5fVFIJCTB4MDA1MAojZGVmaW5lIEkyT19MQU5fRkRESQkJMHgwMDYwCiNkZWZpbmUgSTJPX0xBTl9GSUJSRV9DSEFOTkVMCTB4MDA3MAojZGVmaW5lIEkyT19MQU5fVU5LTk9XTgkJMHgwMDAwMDAwMAoKLyogQ29ubmVjdG9yIHR5cGVzICovCgovKiBFdGhlcm5ldCAqLwojZGVmaW5lIEkyT19MQU5fQVVJCQkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDEKI2RlZmluZSBJMk9fTEFOXzEwQkFTRTUJCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwMgojZGVmaW5lIEkyT19MQU5fRklPUkwJCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwMwojZGVmaW5lIEkyT19MQU5fMTBCQVNFMgkJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDA0CiNkZWZpbmUgSTJPX0xBTl8xMEJST0FEMzYJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDA1CiNkZWZpbmUgSTJPX0xBTl8xMEJBU0VfVAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDYKI2RlZmluZSBJMk9fTEFOXzEwQkFTRV9GUAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDcKI2RlZmluZSBJMk9fTEFOXzEwQkFTRV9GQgkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDgKI2RlZmluZSBJMk9fTEFOXzEwQkFTRV9GTAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMDkKI2RlZmluZSBJMk9fTEFOXzEwMEJBU0VfVFgJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDBBCiNkZWZpbmUgSTJPX0xBTl8xMDBCQVNFX0ZYCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwQgojZGVmaW5lIEkyT19MQU5fMTAwQkFTRV9UNAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMEMKI2RlZmluZSBJMk9fTEFOXzEwMDBCQVNFX1NYCShJMk9fTEFOX0VUSEVSTkVUIDw8IDQpICsgMHgwMDAwMDAwRAojZGVmaW5lIEkyT19MQU5fMTAwMEJBU0VfTFgJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDBFCiNkZWZpbmUgSTJPX0xBTl8xMDAwQkFTRV9DWAkoSTJPX0xBTl9FVEhFUk5FVCA8PCA0KSArIDB4MDAwMDAwMEYKI2RlZmluZSBJMk9fTEFOXzEwMDBCQVNFX1QJKEkyT19MQU5fRVRIRVJORVQgPDwgNCkgKyAweDAwMDAwMDEwCgovKiBBbnlMQU4gKi8KI2RlZmluZSBJMk9fTEFOXzEwMFZHX0VUSEVSTkVUCShJMk9fTEFOXzEwMFZHIDw8IDQpICsgMHgwMDAwMDAwMQojZGVmaW5lIEkyT19MQU5fMTAwVkdfVFIJKEkyT19MQU5fMTAwVkcgPDwgNCkgKyAweDAwMDAwMDAyCgovKiBUb2tlbiBSaW5nICovCiNkZWZpbmUgSTJPX0xBTl80TUJJVAkJKEkyT19MQU5fVFIgPDwgNCkgKyAweDAwMDAwMDAxCiNkZWZpbmUgSTJPX0xBTl8xNk1CSVQJCShJMk9fTEFOX1RSIDw8IDQpICsgMHgwMDAwMDAwMgoKLyogRkRESSAqLwojZGVmaW5lIEkyT19MQU5fMTI1TUJBVUQJKEkyT19MQU5fRkRESSA8PCA0KSArIDB4MDAwMDAwMDEKCi8qIEZpYnJlIENoYW5uZWwgKi8KI2RlZmluZSBJMk9fTEFOX1BPSU5UX1BPSU5UCShJMk9fTEFOX0ZJQlJFX0NIQU5ORUwgPDwgNCkgKyAweDAwMDAwMDAxCiNkZWZpbmUgSTJPX0xBTl9BUkJfTE9PUAkoSTJPX0xBTl9GSUJSRV9DSEFOTkVMIDw8IDQpICsgMHgwMDAwMDAwMgojZGVmaW5lIEkyT19MQU5fUFVCTElDX0xPT1AJKEkyT19MQU5fRklCUkVfQ0hBTk5FTCA8PCA0KSArIDB4MDAwMDAwMDMKI2RlZmluZSBJMk9fTEFOX0ZBQlJJQwkJKEkyT19MQU5fRklCUkVfQ0hBTk5FTCA8PCA0KSArIDB4MDAwMDAwMDQKCiNkZWZpbmUgSTJPX0xBTl9FTVVMQVRJT04JMHgwMDAwMEYwMAojZGVmaW5lIEkyT19MQU5fT1RIRVIJCTB4MDAwMDBGMDEKI2RlZmluZSBJMk9fTEFOX0RFRkFVTFQJCTB4RkZGRkZGRkYKCi8qIExBTiBjbGFzcyBmdW5jdGlvbnMgKi8KCiNkZWZpbmUgTEFOX1BBQ0tFVF9TRU5ECQkweDNCCiNkZWZpbmUgTEFOX1NEVV9TRU5ECQkweDNECiNkZWZpbmUgTEFOX1JFQ0VJVkVfUE9TVAkweDNFCiNkZWZpbmUgTEFOX1JFU0VUCQkweDM1CiNkZWZpbmUgTEFOX1NVU1BFTkQJCTB4MzcKCi8qIExBTiBEZXRhaWxlZFN0YXR1c0NvZGUgZGVmaW5lcyAqLwojZGVmaW5lIEkyT19MQU5fRFNDX1NVQ0NFU1MJCQkweDAwCiNkZWZpbmUgSTJPX0xBTl9EU0NfREVWSUNFX0ZBSUxVUkUJCTB4MDEKI2RlZmluZSBJMk9fTEFOX0RTQ19ERVNUSU5BVElPTl9OT1RfRk9VTkQJMHgwMgojZGVmaW5lCUkyT19MQU5fRFNDX1RSQU5TTUlUX0VSUk9SCQkweDAzCiNkZWZpbmUgSTJPX0xBTl9EU0NfVFJBTlNNSVRfQUJPUlRFRAkJMHgwNAojZGVmaW5lIEkyT19MQU5fRFNDX1JFQ0VJVkVfRVJST1IJCTB4MDUKI2RlZmluZSBJMk9fTEFOX0RTQ19SRUNFSVZFX0FCT1JURUQJCTB4MDYKI2RlZmluZSBJMk9fTEFOX0RTQ19ETUFfRVJST1IJCQkweDA3CiNkZWZpbmUgSTJPX0xBTl9EU0NfQkFEX1BBQ0tFVF9ERVRFQ1RFRAkJMHgwOAojZGVmaW5lIEkyT19MQU5fRFNDX09VVF9PRl9NRU1PUlkJCTB4MDkKI2RlZmluZSBJMk9fTEFOX0RTQ19CVUNLRVRfT1ZFUlJVTgkJMHgwQQojZGVmaW5lIEkyT19MQU5fRFNDX0lPUF9JTlRFUk5BTF9FUlJPUgkJMHgwQgojZGVmaW5lIEkyT19MQU5fRFNDX0NBTkNFTEVECQkJMHgwQwojZGVmaW5lIEkyT19MQU5fRFNDX0lOVkFMSURfVFJBTlNBQ1RJT05fQ09OVEVYVAkweDBECiNkZWZpbmUgSTJPX0xBTl9EU0NfREVTVF9BRERSRVNTX0RFVEVDVEVECTB4MEUKI2RlZmluZSBJMk9fTEFOX0RTQ19ERVNUX0FERFJFU1NfT01JVFRFRAkweDBGCiNkZWZpbmUgSTJPX0xBTl9EU0NfUEFSVElBTF9QQUNLRVRfUkVUVVJORUQJMHgxMAojZGVmaW5lIEkyT19MQU5fRFNDX1NVU1BFTkRFRAkJCTB4MTEKCnN0cnVjdCBpMm9fcGFja2V0X2luZm8gewoJdTMyIG9mZnNldDoyNDsKCXUzMiBmbGFnczo4OwoJdTMyIGxlbjoyNDsKCXUzMiBzdGF0dXM6ODsKfTsKCnN0cnVjdCBpMm9fYnVja2V0X2Rlc2NyaXB0b3IgewoJdTMyIGNvbnRleHQ7CQkvKiBGSVhNRTogNjRiaXQgc3VwcG9ydCAqLwoJc3RydWN0IGkyb19wYWNrZXRfaW5mbyBwYWNrZXRfaW5mb1sxXTsKfTsKCi8qIEV2ZW50IEluZGljYXRvciBNYXNrIEZsYWdzIGZvciBMQU4gT1NNICovCgojZGVmaW5lIEkyT19MQU5fRVZUX0xJTktfRE9XTgkJMHgwMQojZGVmaW5lIEkyT19MQU5fRVZUX0xJTktfVVAJCTB4MDIKI2RlZmluZSBJMk9fTEFOX0VWVF9NRURJQV9DSEFOR0UgCTB4MDQKCiNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KI2luY2x1ZGUgPGxpbnV4L2ZkZGlkZXZpY2UuaD4KCnN0cnVjdCBpMm9fbGFuX2xvY2FsIHsKCXU4IHVuaXQ7CglzdHJ1Y3QgaTJvX2RldmljZSAqaTJvX2RldjsKCglzdHJ1Y3QgZmRkaV9zdGF0aXN0aWNzIHN0YXRzOwkvKiBzZWUgYWxzbyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqLwoJdW5zaWduZWQgc2hvcnQgKCp0eXBlX3RyYW5zKSAoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CglhdG9taWNfdCBidWNrZXRzX291dDsJLyogbmJyIG9mIHVudXNlZCBidWNrZXRzIG9uIERETSAqLwoJYXRvbWljX3QgdHhfb3V0OwkvKiBvdXRzdGFuZGluZyBUWGVzICovCgl1OCB0eF9jb3VudDsJCS8qIHBhY2tldHMgaW4gb25lIFRYIG1lc3NhZ2UgZnJhbWUgKi8KCXUxNiB0eF9tYXhfb3V0OwkJLyogRERNJ3MgVHggcXVldWUgbGVuICovCgl1OCBzZ2xfbWF4OwkJLyogbWF4IFNHTHMgaW4gb25lIG1lc3NhZ2UgZnJhbWUgKi8KCXUzMiBtOwkJCS8qIElPUCBhZGRyZXNzIG9mIHRoZSBiYXRjaCBtc2cgZnJhbWUgKi8KCglzdHJ1Y3Qgd29ya19zdHJ1Y3QgaTJvX2JhdGNoX3NlbmRfdGFzazsKCWludCBzZW5kX2FjdGl2ZTsKCXN0cnVjdCBza19idWZmICoqaTJvX2ZibDsJLyogRnJlZSBidWNrZXQgbGlzdCAodG8gcmV1c2Ugc2ticykgKi8KCWludCBpMm9fZmJsX3RhaWw7CglzcGlubG9ja190IGZibF9sb2NrOwoKCXNwaW5sb2NrX3QgdHhfbG9jazsKCgl1MzIgbWF4X3NpemVfbWNfdGFibGU7CS8qIG1heCBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyAqLwoKCS8qIExBTiBPU00gY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgYXJlIGhlcmU6ICovCgoJdTE2IG1heF9idWNrZXRzX291dDsJLyogbWF4IG5iciBvZiBidWNrZXRzIHRvIHNlbmQgdG8gRERNICovCgl1MTYgYnVja2V0X3RocmVzaDsJLyogc2VuZCBtb3JlIHdoZW4gdGhpcyBtYW55IHVzZWQgKi8KCXUxNiByeF9jb3B5YnJlYWs7CgoJdTggdHhfYmF0Y2hfbW9kZTsJLyogU2V0IHdoZW4gdXNpbmcgYmF0Y2ggbW9kZSBzZW5kcyAqLwoJdTMyIGkyb19ldmVudF9tYXNrOwkvKiBUbyB0dXJuIG9uIGludGVyZXN0aW5nIGV2ZW50IGZsYWdzICovCn07CgojZW5kaWYJCQkJLyogX0kyT19MQU5fSCAqLwo=