LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCANCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIENvcHlyaWdodCAoYykgMjAwOCwgQXRtZWwgQ29ycG9yYXRpb24NCiAqDQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogKg0KICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQogKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGRpc2NsYWltZXIgYmVsb3cuDQogKg0KICogQXRtZWwncyBuYW1lIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICoNCiAqIERJU0NMQUlNRVI6IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1INCiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQogKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQogKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GDQogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqLw0KDQojaWZuZGVmIF9HTUlJX0RFRklORV9IDQojZGVmaW5lIF9HTUlJX0RFRklORV9IDQoNCg0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8vICAgICAgICAgRGVmaW5pdGlvbnMNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vSUVFRSBkZWZpbmVkIFJlZ2lzdGVycw0KI2RlZmluZSBHTUlJX0JNQ1IgICAgICAgIDB4MCAgIC8vIEJhc2ljIE1vZGUgQ29udHJvbCBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0JNU1IgICAgICAgIDB4MSAgIC8vIEJhc2ljIE1vZGUgU3RhdHVzIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfUEhZSUQxUiAgICAgMHgyICAgLy8gUEhZIElkZW5kaWZpZXIgUmVnaXN0ZXIgMQ0KI2RlZmluZSBHTUlJX1BIWUlEMlIgICAgIDB4MyAgIC8vIFBIWSBJZGVuZGlmaWVyIFJlZ2lzdGVyIDINCiNkZWZpbmUgR01JSV9BTkFSICAgICAgICAweDQgICAvLyBBdXRvX05lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9BTkxQQVIgICAgICAweDUgICAvLyBBdXRvX25lZ290aWF0aW9uIExpbmsgUGFydG5lciBBYmlsaXR5IFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfQU5FUiAgICAgICAgMHg2ICAgLy8gQXV0by1uZWdvdGlhdGlvbiBFeHBhbnNpb24gUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9BTk5QUiAgICAgICAweDcgICAvLyBBdXRvLW5lZ290aWF0aW9uIE5leHQgUGFnZSBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0FOTFBOUEFSICAgIDB4OCAgIC8vIEF1dG9fbmVnb3RpYXRpb24gTGluayBQYXJ0bmVyIE5leHQgUGFnZSBBYmlsaXR5IFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfRFJDUiAgICAgICAgMHgxMCAgIC8vIERpZ2l0YWwgUmVzZXJ2ZWQgQ29udHJvbCBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0FGRUMxUiAgICAgIDB4MTEgICAvLyBBRkUgQ29udHJvbCAxIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfUlhFUkNSICAgICAgMHgxNSAgIC8vIFJYRVIgQ291dGVyIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfT01TT1IgICAgICAgMHgxNiAgIC8vIE9wZXJhdGlvbiBNb2RlIFN0cmFwIE92ZXJyaWRlIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfT01TU1IgICAgICAgMHgxNyAgIC8vIE9wZXJhdGlvbiBNb2RlIFN0cmFwIFN0YXR1cyBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0VDUiAgICAgICAgIDB4MTggICAvLyBFeHBhbmRlZCBDb250cm9sIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfSUNTUiAgICAgICAgMHgxQiAgIC8vIEludGVycnVwdCBDb250cm9sL1N0YXR1cyBSZWdpc3Rlcg0KI2RlZmluZSBHTUlJX0xDU1IgICAgICAgIDB4MUQgICAvLyBMaW5rTUSuIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyDQojZGVmaW5lIEdNSUlfUEMxUiAgICAgICAgMHgxRSAgIC8vIFBIWSBDb250cm9sIDEgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9QQzJSICAgICAgICAweDFGICAvLyBQSFkgQ29udHJvbCAyIFJlZ2lzdGVyDQoNCg0KLy8gUEhZIElEIElkZW50aWZpZXIgUmVnaXN0ZXINCiNkZWZpbmUgR01JSV9MU0JfTUFTSyAgICAgICAgICAgMHhGDQovLyBkZWZpbml0aW9uczogTUlJX1BIWUlEMQ0KI2RlZmluZSBHTUlJX09VSV9NU0IgICAgICAgICAgICAweDAwMjINCi8vIGRlZmluaXRpb25zOiBNSUlfUEhZSUQyDQojZGVmaW5lIEdNSUlfT1VJX0xTQiAgICAgICAgICAgIDB4MTU2MA0KDQoNCg0KLy8gQmFzaWMgTW9kZSBDb250cm9sIFJlZ2lzdGVyIChCTUNSKQ0KLy8gQml0IGRlZmluaXRpb25zOiBNSUlfQk1DUg0KI2RlZmluZSBHTUlJX1JFU0VUICAgICAgICAgICAgICgxIDw8IDE1KSAvLyAxPSBTb2Z0d2FyZSBSZXNldDsgMD1Ob3JtYWwgT3BlcmF0aW9uDQojZGVmaW5lIEdNSUlfTE9PUEJBQ0sgICAgICAgICAgKDEgPDwgMTQpIC8vIDE9bG9vcGJhY2sgRW5hYmxlZDsgMD1Ob3JtYWwgT3BlcmF0aW9uDQojZGVmaW5lIEdNSUlfU1BFRURfU0VMRUNUX0xTQiAgKDEgPDwgMTMpIC8vIDEsMD0xMDAwTWJwcyAwLDE9MTAwTWJwczsgMCwwPTEwTWJwcw0KI2RlZmluZSBHTUlJX0FVVE9ORUcgICAgICAgICAgICgxIDw8IDEyKSAvLyBBdXRvLW5lZ290aWF0aW9uIEVuYWJsZQ0KI2RlZmluZSBHTUlJX1BPV0VSX0RPV04gICAgICAgICgxIDw8IDExKSAvLyAxPVBvd2VyIGRvd24gMD1Ob3JtYWwgb3BlcmF0aW9uDQojZGVmaW5lIEdNSUlfSVNPTEFURSAgICAgICAgICAgKDEgPDwgMTApIC8vIDEgPSBJc29sYXRlcyAwID0gTm9ybWFsIG9wZXJhdGlvbg0KI2RlZmluZSBHTUlJX1JFU1RBUlRfQVVUT05FRyAgICgxIDw8IDkpICAvLyAxID0gUmVzdGFydCBhdXRvLW5lZ290aWF0aW9uIDAgPSBOb3JtYWwgb3BlcmF0aW9uDQojZGVmaW5lIEdNSUlfRFVQTEVYX01PREUgICAgICAgKDEgPDwgOCkgIC8vIDEgPSBGdWxsIGR1cGxleCBvcGVyYXRpb24gMCA9IE5vcm1hbCBvcGVyYXRpb24NCi8vICAgICAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgNyAgICAgICAgLy8gUmVhZCBhcyAwLCBpZ25vcmUgb24gd3JpdGUNCiNkZWZpbmUgR01JSV9TUEVFRF9TRUxFQ1RfTVNCICAoMSA8PCA2KSAgLy8gDQovLyAgICAgIFJlc2VydmVkICAgICAgICAgICAgICAgIDUgdG8gMCAgIC8vIFJlYWQgYXMgMCwgaWdub3JlIG9uIHdyaXRlDQoNCg0KLy8gQmFzaWMgTW9kZSBTdGF0dXMgUmVnaXN0ZXIgKEJNU1IpDQovLyBCaXQgZGVmaW5pdGlvbnM6IE1JSV9CTVNSDQojZGVmaW5lIEdNSUlfMTAwQkFTRV9UNCAgICAgICAgKDEgPDwgMTUpIC8vIDEwMEJBU0UtVDQgQ2FwYWJsZQ0KI2RlZmluZSBHTUlJXzEwMEJBU0VfVFhfRkQgICAgICgxIDw8IDE0KSAvLyAxMDBCQVNFLVRYIEZ1bGwgRHVwbGV4IENhcGFibGUNCiNkZWZpbmUgR01JSV8xMDBCQVNFX1Q0X0hEICAgICAoMSA8PCAxMykgLy8gMTAwQkFTRS1UWCBIYWxmIER1cGxleCBDYXBhYmxlDQojZGVmaW5lIEdNSUlfMTBCQVNFX1RfRkQgICAgICAgKDEgPDwgMTIpIC8vIDEwQkFTRS1UIEZ1bGwgRHVwbGV4IENhcGFibGUNCiNkZWZpbmUgR01JSV8xMEJBU0VfVF9IRCAgICAgICAoMSA8PCAxMSkgLy8gMTBCQVNFLVQgSGFsZiBEdXBsZXggQ2FwYWJsZQ0KLy8gICAgICBSZXNlcnZlZCAgICAgICAgICAgICAgICAxMCB0byA5ICAvLyBSZWFkIGFzIDAsIGlnbm9yZSBvbiB3cml0ZQ0KI2RlZmluZSBHTUlJX0VYVEVORF9TVEFUVVMgICAgICgxIDw8IDgpICAvLyAxID0gRXh0ZW5kIFN0YXR1cyBJbmZvcm1hdGlvbiBJbiBSZWcgMTUNCi8vICAgICAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgNw0KI2RlZmluZSBHTUlJX01GX1BSRUFNQl9TVVBQUiAgICgxIDw8IDYpICAvLyBNSUkgRnJhbWUgUHJlYW1ibGUgU3VwcHJlc3Npb24NCiNkZWZpbmUgR01JSV9BVVRPTkVHX0NPTVAgICAgICAoMSA8PCA1KSAgLy8gQXV0by1uZWdvdGlhdGlvbiBDb21wbGV0ZQ0KI2RlZmluZSBHTUlJX1JFTU9URV9GQVVMVCAgICAgICgxIDw8IDQpICAvLyBSZW1vdGUgRmF1bHQNCiNkZWZpbmUgR01JSV9BVVRPTkVHX0FCSUxJVFkgICAoMSA8PCAzKSAgLy8gQXV0byBDb25maWd1cmF0aW9uIEFiaWxpdHkNCiNkZWZpbmUgR01JSV9MSU5LX1NUQVRVUyAgICAgICAoMSA8PCAyKSAgLy8gTGluayBTdGF0dXMNCiNkZWZpbmUgR01JSV9KQUJCRVJfREVURUNUICAgICAoMSA8PCAxKSAgLy8gSmFiYmVyIERldGVjdA0KI2RlZmluZSBHTUlJX0VYVEVORF9DQVBBQiAgICAgICgxIDw8IDApICAvLyBFeHRlbmRlZCBDYXBhYmlsaXR5DQoNCg0KLy8gQXV0by1uZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyIChBTkFSKQ0KLy8gQXV0by1uZWdvdGlhdGlvbiBMaW5rIFBhcnRuZXIgQWJpbGl0eSBSZWdpc3RlciAoQU5MUEFSKQ0KLy8gQml0IGRlZmluaXRpb25zOiBNSUlfQU5BUiwgTUlJX0FOTFBBUg0KI2RlZmluZSBHTUlJX05QICAgICAgICAgICAgICAgKDEgPDwgMTUpIC8vIE5leHQgcGFnZSBJbmRpY2F0aW9uDQovLyAgICAgIFJlc2VydmVkICAgICAgICAgICAgICAgNw0KI2RlZmluZSBHTUlJX1JGICAgICAgICAgICAgICAgKDEgPDwgMTMpIC8vIFJlbW90ZSBGYXVsdA0KLy8gICAgICBSZXNlcnZlZCAgICAgICAgICAgICAgIDEyICAgICAgIC8vIFdyaXRlIGFzIDAsIGlnbm9yZSBvbiByZWFkDQojZGVmaW5lIEdNSUlfUEFVU0VfTUFTSyAgICAgICAoMyA8PCAxMSkgLy8gMCwwID0gTm8gUGF1c2UgMSwwID0gQXN5bW1ldHJpYyBQYXVzZShsaW5rIHBhcnRuZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCwxID0gU3ltbWV0cmljIFBhdXNlIDEsMSA9IFN5bW1ldHJpYyZBc3ltbWV0cmljIFBhdXNlKGxvY2FsIGRldmljZSkgICANCiNkZWZpbmUgR01JSV9UNCAgICAgICAgICAgICAgICgxIDw8IDkpICAvLyAxMDBCQVNFLVQ0IFN1cHBvcnQNCiNkZWZpbmUgR01JSV9UWF9GRFggICAgICAgICAgICgxIDw8IDgpICAvLyAxMDBCQVNFLVRYIEZ1bGwgRHVwbGV4IFN1cHBvcnQNCiNkZWZpbmUgR01JSV9UWF9IRFggICAgICAgICAgICgxIDw8IDcpICAvLyAxMDBCQVNFLVRYIFN1cHBvcnQNCiNkZWZpbmUgR01JSV8xMF9GRFggICAgICAgICAgICgxIDw8IDYpICAvLyAxMEJBU0UtVCBGdWxsIER1cGxleCBTdXBwb3J0DQojZGVmaW5lIEdNSUlfMTBfSERYICAgICAgICAgICAoMSA8PCA1KSAgLy8gMTBCQVNFLVQgU3VwcG9ydA0KLy8gICAgICBTZWxlY3RvciAgICAgICAgICAgICAgICAgNCB0byAwICAgLy8gUHJvdG9jb2wgU2VsZWN0aW9uIEJpdHMNCiNkZWZpbmUgR01JSV9BTl9JRUVFXzgwMl8zICAgICAgMHgwMDAxDQoNCg0KDQojZW5kaWYgLy8gI2lmbmRlZiBfTUlJX0RFRklORV9IDQoNCg==