LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgICBTQU0gU29mdHdhcmUgUGFja2FnZSBMaWNlbnNlDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEF0bWVsIENvcnBvcmF0aW9uDQogKg0KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqDQogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KICoNCiAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBkaXNjbGFpbWVyIGJlbG93Lg0KICoNCiAqIEF0bWVsJ3MgbmFtZSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCiAqDQogKiBESVNDTEFJTUVSOiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFUTUVMICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SDQogKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5UIEFSRQ0KICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLA0KICogT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRg0KICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcNCiAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwNCiAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKi8NCg0KI2lmbmRlZiBfR01JSV9ERUZJTkVfSA0KI2RlZmluZSBfR01JSV9ERUZJTkVfSA0KDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKiAgICAgICAgIERlZmluaXRpb25zDQogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8vSUVFRSBkZWZpbmVkIFJlZ2lzdGVycw0KI2RlZmluZSBHTUlJX0JNQ1IgICAgICAgIDB4MCAgIC8vIEJhc2ljIE1vZGUgQ29udHJvbCBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0JNU1IgICAgICAgIDB4MSAgIC8vIEJhc2ljIE1vZGUgU3RhdHVzIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfUEhZSUQxUiAgICAgMHgyICAgLy8gUEhZIElkZW50aWZpZXIgUmVnaXN0ZXIgMQ0KI2RlZmluZSBHTUlJX1BIWUlEMlIgICAgIDB4MyAgIC8vIFBIWSBJZGVudGlmaWVyIFJlZ2lzdGVyIDINCiNkZWZpbmUgR01JSV9BTkFSICAgICAgICAweDQgICAvLyBBdXRvX05lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9BTkxQQVIgICAgICAweDUgICAvLyBBdXRvX25lZ290aWF0aW9uIExpbmsgUGFydG5lciBBYmlsaXR5IFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfQU5FUiAgICAgICAgMHg2ICAgLy8gQXV0by1uZWdvdGlhdGlvbiBFeHBhbnNpb24gUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9BTk5QUiAgICAgICAweDcgICAvLyBBdXRvLW5lZ290aWF0aW9uIE5leHQgUGFnZSBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0FOTFBOUEFSICAgIDB4OCAgIC8vIEF1dG9fbmVnb3RpYXRpb24gTGluayBQYXJ0bmVyIE5leHQgUGFnZSBBYmlsaXR5IFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfQUZFQzBSICAgICAgMHgxMSAgLy8gQUZFIENvbnRyb2wgMCBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0FGRUMzUiAgICAgIDB4MTQgIC8vIEFGRSBDb250cm9sIDMgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9SWEVSQ1IgICAgICAweDE1ICAvLyBSWEVSIENvdW50ZXIgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9PTVNTUiAgICAgICAweDE3ICAvLyBPcGVyYXRpb24gTW9kZSBTdHJhcCBTdGF0dXMgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9FQ1IgICAgICAgICAweDE4ICAvLyBFeHBhbmRlZCBDb250cm9sIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfSUNTUiAgICAgICAgMHgxQiAgLy8gSW50ZXJydXB0IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfRkMgICAgICAgICAgMHgxQyAgLy8gRnVuY3Rpb24gQ29udHJvbA0KI2RlZmluZSBHTUlJX0xDU1IgICAgICAgIDB4MUQgIC8vIExpbmtNRK4gQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9QQzFSICAgICAgICAweDFFICAvLyBQSFkgQ29udHJvbCAxIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfUEMyUiAgICAgICAgMHgxRiAgLy8gUEhZIENvbnRyb2wgMiBSZWdpc3Rlcg0KDQovLyBQSFkgSUQgSWRlbnRpZmllciBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0xTQl9NQVNLICAgICAgICAgICAweDBVDQovLyBkZWZpbml0aW9uczogTUlJX1BIWUlEMQ0KI2RlZmluZSBHTUlJX09VSV9NU0IgICAgICAgICAgICAweDAwMjINCi8vIGRlZmluaXRpb25zOiBNSUlfUEhZSUQyDQojZGVmaW5lIEdNSUlfT1VJX0xTQiAgICAgICAgICAgIDB4MTU3MiAgICAgICAgICAvLyBLU1o4MDYxIFBIWSBJZDINCg0KLy8gQmFzaWMgTW9kZSBDb250cm9sIFJlZ2lzdGVyIChCTUNSKQ0KLy8gQml0IGRlZmluaXRpb25zOiBNSUlfQk1DUg0KI2RlZmluZSBHTUlJX1JFU0VUICAgICAgICAgICAgICgxIDw8IDE1KSAvLyAxPSBTb2Z0d2FyZSBSZXNldDsgMD1Ob3JtYWwgT3BlcmF0aW9uDQojZGVmaW5lIEdNSUlfTE9PUEJBQ0sgICAgICAgICAgKDEgPDwgMTQpIC8vIDE9bG9vcGJhY2sgRW5hYmxlZDsgMD1Ob3JtYWwgT3BlcmF0aW9uDQojZGVmaW5lIEdNSUlfU1BFRURfU0VMRUNUX0xTQiAgKDEgPDwgMTMpIC8vIDEsMD0xMDAwTWJwcyAwLDE9MTAwTWJwczsgMCwwPTEwTWJwcw0KI2RlZmluZSBHTUlJX0FVVE9ORUcgICAgICAgICAgICgxIDw8IDEyKSAvLyBBdXRvLW5lZ290aWF0aW9uIEVuYWJsZQ0KI2RlZmluZSBHTUlJX1BPV0VSX0RPV04gICAgICAgICgxIDw8IDExKSAvLyAxPVBvd2VyIGRvd24gMD1Ob3JtYWwgb3BlcmF0aW9uDQojZGVmaW5lIEdNSUlfSVNPTEFURSAgICAgICAgICAgKDEgPDwgMTApIC8vIDEgPSBJc29sYXRlcyAwID0gTm9ybWFsIG9wZXJhdGlvbg0KI2RlZmluZSBHTUlJX1JFU1RBUlRfQVVUT05FRyAgICgxIDw8IDkpICAvLyAxID0gUmVzdGFydCBhdXRvLW5lZ290aWF0aW9uIDAgPSBOb3JtYWwgb3BlcmF0aW9uDQojZGVmaW5lIEdNSUlfRFVQTEVYX01PREUgICAgICAgKDEgPDwgOCkgIC8vIDEgPSBGdWxsIGR1cGxleCBvcGVyYXRpb24gMCA9IE5vcm1hbCBvcGVyYXRpb24NCi8vICAgICAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgNyAgICAgICAgLy8gUmVhZCBhcyAwLCBpZ25vcmUgb24gd3JpdGUNCiNkZWZpbmUgR01JSV9TUEVFRF9TRUxFQ1RfTVNCICAoMSA8PCA2KSAgLy8gDQovLyAgICAgIFJlc2VydmVkICAgICAgICAgICAgICAgIDUgdG8gMCAgIC8vIFJlYWQgYXMgMCwgaWdub3JlIG9uIHdyaXRlDQoNCg0KLy8gQmFzaWMgTW9kZSBTdGF0dXMgUmVnaXN0ZXIgKEJNU1IpDQovLyBCaXQgZGVmaW5pdGlvbnM6IE1JSV9CTVNSDQojZGVmaW5lIEdNSUlfMTAwQkFTRV9UNCAgICAgICAgKDEgPDwgMTUpIC8vIDEwMEJBU0UtVDQgQ2FwYWJsZQ0KI2RlZmluZSBHTUlJXzEwMEJBU0VfVFhfRkQgICAgICgxIDw8IDE0KSAvLyAxMDBCQVNFLVRYIEZ1bGwgRHVwbGV4IENhcGFibGUNCiNkZWZpbmUgR01JSV8xMDBCQVNFX1Q0X0hEICAgICAoMSA8PCAxMykgLy8gMTAwQkFTRS1UWCBIYWxmIER1cGxleCBDYXBhYmxlDQojZGVmaW5lIEdNSUlfMTBCQVNFX1RfRkQgICAgICAgKDEgPDwgMTIpIC8vIDEwQkFTRS1UIEZ1bGwgRHVwbGV4IENhcGFibGUNCiNkZWZpbmUgR01JSV8xMEJBU0VfVF9IRCAgICAgICAoMSA8PCAxMSkgLy8gMTBCQVNFLVQgSGFsZiBEdXBsZXggQ2FwYWJsZQ0KLy8gICAgICBSZXNlcnZlZCAgICAgICAgICAgICAgICAxMCB0byA5ICAvLyBSZWFkIGFzIDAsIGlnbm9yZSBvbiB3cml0ZQ0KI2RlZmluZSBHTUlJX0VYVEVORF9TVEFUVVMgICAgICgxIDw8IDgpICAvLyAxID0gRXh0ZW5kIFN0YXR1cyBJbmZvcm1hdGlvbiBJbiBSZWcgMTUNCi8vICAgICAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgNw0KI2RlZmluZSBHTUlJX01GX1BSRUFNQl9TVVBQUiAgICgxIDw8IDYpICAvLyBNSUkgRnJhbWUgUHJlYW1ibGUgU3VwcHJlc3Npb24NCiNkZWZpbmUgR01JSV9BVVRPTkVHX0NPTVAgICAgICAoMSA8PCA1KSAgLy8gQXV0by1uZWdvdGlhdGlvbiBDb21wbGV0ZQ0KI2RlZmluZSBHTUlJX1JFTU9URV9GQVVMVCAgICAgICgxIDw8IDQpICAvLyBSZW1vdGUgRmF1bHQNCiNkZWZpbmUgR01JSV9BVVRPTkVHX0FCSUxJVFkgICAoMSA8PCAzKSAgLy8gQXV0byBDb25maWd1cmF0aW9uIEFiaWxpdHkNCiNkZWZpbmUgR01JSV9MSU5LX1NUQVRVUyAgICAgICAoMSA8PCAyKSAgLy8gTGluayBTdGF0dXMNCiNkZWZpbmUgR01JSV9KQUJCRVJfREVURUNUICAgICAoMSA8PCAxKSAgLy8gSmFiYmVyIERldGVjdA0KI2RlZmluZSBHTUlJX0VYVEVORF9DQVBBQiAgICAgICgxIDw8IDApICAvLyBFeHRlbmRlZCBDYXBhYmlsaXR5DQoNCi8vIEF1dG8tbmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAoQU5BUikNCi8vIEF1dG8tbmVnb3RpYXRpb24gTGluayBQYXJ0bmVyIEFiaWxpdHkgUmVnaXN0ZXIgKEFOTFBBUikNCi8vIEJpdCBkZWZpbml0aW9uczogTUlJX0FOQVIsIE1JSV9BTkxQQVINCiNkZWZpbmUgR01JSV9OUCAgICAgICAgICAgICAgICgxIDw8IDE1KSAvLyBOZXh0IHBhZ2UgSW5kaWNhdGlvbg0KLy8gICAgICBSZXNlcnZlZCAgICAgICAgICAgICAgIDcNCiNkZWZpbmUgR01JSV9SRiAgICAgICAgICAgICAgICgxIDw8IDEzKSAvLyBSZW1vdGUgRmF1bHQNCi8vICAgICAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAxMiAgICAgICAvLyBXcml0ZSBhcyAwLCBpZ25vcmUgb24gcmVhZA0KI2RlZmluZSBHTUlJX1BBVVNFX01BU0sgICAgICAgKDMgPDwgMTEpIC8vIDAsMCA9IE5vIFBhdXNlIDEsMCA9IEFzeW1tZXRyaWMgUGF1c2UobGluayBwYXJ0bmVyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAsMSA9IFN5bW1ldHJpYyBQYXVzZSAxLDEgPSBTeW1tZXRyaWMmQXN5bW1ldHJpYyBQYXVzZShsb2NhbCBkZXZpY2UpDQojZGVmaW5lIEdNSUlfVDQgICAgICAgICAgICAgICAoMSA8PCA5KSAgLy8gMTAwQkFTRS1UNCBTdXBwb3J0DQojZGVmaW5lIEdNSUlfVFhfRkRYICAgICAgICAgICAoMSA8PCA4KSAgLy8gMTAwQkFTRS1UWCBGdWxsIER1cGxleCBTdXBwb3J0DQojZGVmaW5lIEdNSUlfVFhfSERYICAgICAgICAgICAoMSA8PCA3KSAgLy8gMTAwQkFTRS1UWCBTdXBwb3J0DQojZGVmaW5lIEdNSUlfMTBfRkRYICAgICAgICAgICAoMSA8PCA2KSAgLy8gMTBCQVNFLVQgRnVsbCBEdXBsZXggU3VwcG9ydA0KI2RlZmluZSBHTUlJXzEwX0hEWCAgICAgICAgICAgKDEgPDwgNSkgIC8vIDEwQkFTRS1UIFN1cHBvcnQNCi8vICAgICAgU2VsZWN0b3IgICAgICAgICAgICAgICAgIDQgdG8gMCAgIC8vIFByb3RvY29sIFNlbGVjdGlvbiBCaXRzDQojZGVmaW5lIEdNSUlfQU5fSUVFRV84MDJfMyAgICAgIDB4MDAwMDENCg0KI2VuZGlmIC8vICNpZm5kZWYgX01JSV9ERUZJTkVfSA0K