LyoqIEBmaWxlDQogIERlYnVnU3VwcG9ydCBwcm90b2NvbCBhbmQgc3VwcG9ydGluZyBkZWZpbml0aW9ucyBhcyBkZWZpbmVkIGluIHRoZSBVRUZJMi4wDQogIHNwZWNpZmljYXRpb24uDQoNCiAgVGhlIERlYnVnU3VwcG9ydCBwcm90b2NvbCBpcyB1c2VkIGJ5IHNvdXJjZSBsZXZlbCBkZWJ1Z2dlcnMgdG8gYWJzdHJhY3QgdGhlDQogIHByb2Nlc3NvciBhbmQgaGFuZGxlIGNvbnRleHQgc2F2ZSBhbmQgcmVzdG9yZSBvcGVyYXRpb25zLg0KDQogIENvcHlyaWdodCAoYykgMjAwNiwgSW50ZWwgQ29ycG9yYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZSAgICAgICAgIA0KICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0ICAgICAgICANCiAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsICAgICAgICAgICAgICAgICAgICAgDQogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuICAgICAgICAgICAgIA0KDQogIE1vZHVsZSBOYW1lOiAgRGVidWdTdXBwb3J0LmgNCg0KKiovDQoNCiNpZm5kZWYgX19ERUJVR19TVVBQT1JUX0hfXw0KI2RlZmluZSBfX0RFQlVHX1NVUFBPUlRfSF9fDQoNCnR5cGVkZWYgc3RydWN0IF9FRklfREVCVUdfU1VQUE9SVF9QUk9UT0NPTCBFRklfREVCVUdfU1VQUE9SVF9QUk9UT0NPTDsNCg0KLy8NCi8vIERlYnVnIFN1cHBvcnQgcHJvdG9jb2wgezI3NTU1OTBDLTZGM0MtNDJGQS05RUE0LUEzQkE1NDNDREEyNX0NCi8vDQojZGVmaW5lIEVGSV9ERUJVR19TVVBQT1JUX1BST1RPQ09MX0dVSUQgXA0KICB7IFwNCiAgICAweDI3NTU1OTBDLCAweDZGM0MsIDB4NDJGQSwgezB4OUUsIDB4QTQsIDB4QTMsIDB4QkEsIDB4NTQsIDB4M0MsIDB4REEsIDB4MjUgfSBcDQogIH0NCg0KLy8NCi8vIERlYnVnIFN1cHBvcnQgZGVmaW5pdGlvbnMNCi8vDQp0eXBlZGVmIElOVE4gIEVGSV9FWENFUFRJT05fVFlQRTsNCg0KLy8NCi8vICBJQS0zMiBwcm9jZXNzb3IgZXhjZXB0aW9uIHR5cGVzDQovLw0KI2RlZmluZSBFWENFUFRfSUEzMl9ESVZJREVfRVJST1IgICAgMA0KI2RlZmluZSBFWENFUFRfSUEzMl9ERUJVRyAgICAgICAgICAgMQ0KI2RlZmluZSBFWENFUFRfSUEzMl9OTUkgICAgICAgICAgICAgMg0KI2RlZmluZSBFWENFUFRfSUEzMl9CUkVBS1BPSU5UICAgICAgMw0KI2RlZmluZSBFWENFUFRfSUEzMl9PVkVSRkxPVyAgICAgICAgNA0KI2RlZmluZSBFWENFUFRfSUEzMl9CT1VORCAgICAgICAgICAgNQ0KI2RlZmluZSBFWENFUFRfSUEzMl9JTlZBTElEX09QQ09ERSAgNg0KI2RlZmluZSBFWENFUFRfSUEzMl9ET1VCTEVfRkFVTFQgICAgOA0KI2RlZmluZSBFWENFUFRfSUEzMl9JTlZBTElEX1RTUyAgICAgMTANCiNkZWZpbmUgRVhDRVBUX0lBMzJfU0VHX05PVF9QUkVTRU5UIDExDQojZGVmaW5lIEVYQ0VQVF9JQTMyX1NUQUNLX0ZBVUxUICAgICAxMg0KI2RlZmluZSBFWENFUFRfSUEzMl9HUF9GQVVMVCAgICAgICAgMTMNCiNkZWZpbmUgRVhDRVBUX0lBMzJfUEFHRV9GQVVMVCAgICAgIDE0DQojZGVmaW5lIEVYQ0VQVF9JQTMyX0ZQX0VSUk9SICAgICAgICAxNg0KI2RlZmluZSBFWENFUFRfSUEzMl9BTElHTk1FTlRfQ0hFQ0sgMTcNCiNkZWZpbmUgRVhDRVBUX0lBMzJfTUFDSElORV9DSEVDSyAgIDE4DQojZGVmaW5lIEVYQ0VQVF9JQTMyX1NJTUQgICAgICAgICAgICAxOQ0KDQovLw0KLy8gIElBLTMyIHByb2Nlc3NvciBjb250ZXh0IGRlZmluaXRpb24NCi8vDQovLw0KLy8gRlhTQVZFX1NUQVRFDQovLyBGUCAvIE1NWCAvIFhNTSByZWdpc3RlcnMgKHNlZSBmeHJzdG9yIGluc3RydWN0aW9uIGRlZmluaXRpb24pDQovLw0KdHlwZWRlZiBzdHJ1Y3Qgew0KICBVSU5UMTYgIEZjdzsNCiAgVUlOVDE2ICBGc3c7DQogIFVJTlQxNiAgRnR3Ow0KICBVSU5UMTYgIE9wY29kZTsNCiAgVUlOVDMyICBFaXA7DQogIFVJTlQxNiAgQ3M7DQogIFVJTlQxNiAgUmVzZXJ2ZWQxOw0KICBVSU5UMzIgIERhdGFPZmZzZXQ7DQogIFVJTlQxNiAgRHM7DQogIFVJTlQ4ICAgUmVzZXJ2ZWQyWzEwXTsNCiNpZiAoRUZJX1NQRUNJRklDQVRJT05fVkVSU0lPTiA+PSAweDAwMDIwMDAwKQ0KICBVSU5UOCAgIFN0ME1tMFsxMF0sIFJlc2VydmVkM1s2XTsNCiAgVUlOVDggICBTdDFNbTFbMTBdLCBSZXNlcnZlZDRbNl07DQogIFVJTlQ4ICAgU3QyTW0yWzEwXSwgUmVzZXJ2ZWQ1WzZdOw0KICBVSU5UOCAgIFN0M01tM1sxMF0sIFJlc2VydmVkNls2XTsNCiAgVUlOVDggICBTdDRNbTRbMTBdLCBSZXNlcnZlZDdbNl07DQogIFVJTlQ4ICAgU3Q1TW01WzEwXSwgUmVzZXJ2ZWQ4WzZdOw0KICBVSU5UOCAgIFN0Nk1tNlsxMF0sIFJlc2VydmVkOVs2XTsNCiAgVUlOVDggICBTdDdNbTdbMTBdLCBSZXNlcnZlZDEwWzZdOw0KICBVSU5UOCAgIFhtbTBbMTZdOw0KICBVSU5UOCAgIFhtbTFbMTZdOw0KICBVSU5UOCAgIFhtbTJbMTZdOw0KICBVSU5UOCAgIFhtbTNbMTZdOw0KICBVSU5UOCAgIFhtbTRbMTZdOw0KICBVSU5UOCAgIFhtbTVbMTZdOw0KICBVSU5UOCAgIFhtbTZbMTZdOw0KICBVSU5UOCAgIFhtbTdbMTZdOw0KICBVSU5UOCAgIFJlc2VydmVkMTFbMTQgKiAxNl07DQp9IEVGSV9GWF9TQVZFX1NUQVRFX0lBMzI7DQojZWxzZQ0KICBVSU5UOCAgIFN0ME1tMFsxMF0sIFJlc2VydmVkM1s2XTsNCiAgVUlOVDggICBTdDBNbTFbMTBdLCBSZXNlcnZlZDRbNl07DQogIFVJTlQ4ICAgU3QwTW0yWzEwXSwgUmVzZXJ2ZWQ1WzZdOw0KICBVSU5UOCAgIFN0ME1tM1sxMF0sIFJlc2VydmVkNls2XTsNCiAgVUlOVDggICBTdDBNbTRbMTBdLCBSZXNlcnZlZDdbNl07DQogIFVJTlQ4ICAgU3QwTW01WzEwXSwgUmVzZXJ2ZWQ4WzZdOw0KICBVSU5UOCAgIFN0ME1tNlsxMF0sIFJlc2VydmVkOVs2XTsNCiAgVUlOVDggICBTdDBNbTdbMTBdLCBSZXNlcnZlZDEwWzZdOw0KICBVSU5UOCAgIFJlc2VydmVkMTFbMjIgKiAxNl07DQp9IEVGSV9GWF9TQVZFX1NUQVRFOw0KI2VuZGlmDQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBFeGNlcHRpb25EYXRhOw0KI2lmIChFRklfU1BFQ0lGSUNBVElPTl9WRVJTSU9OID49IDB4MDAwMjAwMDApDQogIEVGSV9GWF9TQVZFX1NUQVRFX0lBMzIgRnhTYXZlU3RhdGU7DQojZWxzZQ0KICBFRklfRlhfU0FWRV9TVEFURSAgICAgIEZ4U2F2ZVN0YXRlOw0KI2VuZGlmDQogIFVJTlQzMiAgICAgICAgICAgICAgICAgRHIwOw0KICBVSU5UMzIgICAgICAgICAgICAgICAgIERyMTsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBEcjI7DQogIFVJTlQzMiAgICAgICAgICAgICAgICAgRHIzOw0KICBVSU5UMzIgICAgICAgICAgICAgICAgIERyNjsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBEcjc7DQogIFVJTlQzMiAgICAgICAgICAgICAgICAgQ3IwOw0KICBVSU5UMzIgICAgICAgICAgICAgICAgIENyMTsgIC8qIFJlc2VydmVkICovDQogIFVJTlQzMiAgICAgICAgICAgICAgICAgQ3IyOw0KICBVSU5UMzIgICAgICAgICAgICAgICAgIENyMzsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBDcjQ7DQogIFVJTlQzMiAgICAgICAgICAgICAgICAgRWZsYWdzOw0KICBVSU5UMzIgICAgICAgICAgICAgICAgIExkdHI7DQogIFVJTlQzMiAgICAgICAgICAgICAgICAgVHI7DQogIFVJTlQzMiAgICAgICAgICAgICAgICAgR2R0clsyXTsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBJZHRyWzJdOw0KICBVSU5UMzIgICAgICAgICAgICAgICAgIEVpcDsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBHczsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBGczsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBFczsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBEczsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBDczsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBTczsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBFZGk7DQogIFVJTlQzMiAgICAgICAgICAgICAgICAgRXNpOw0KICBVSU5UMzIgICAgICAgICAgICAgICAgIEVicDsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBFc3A7DQogIFVJTlQzMiAgICAgICAgICAgICAgICAgRWJ4Ow0KICBVSU5UMzIgICAgICAgICAgICAgICAgIEVkeDsNCiAgVUlOVDMyICAgICAgICAgICAgICAgICBFY3g7DQogIFVJTlQzMiAgICAgICAgICAgICAgICAgRWF4Ow0KfSBFRklfU1lTVEVNX0NPTlRFWFRfSUEzMjsNCg0KLy8NCi8vICBYNjQgcHJvY2Vzc29yIGV4Y2VwdGlvbiB0eXBlcw0KLy8NCiNkZWZpbmUgRVhDRVBUX1g2NF9ESVZJREVfRVJST1IgICAgMA0KI2RlZmluZSBFWENFUFRfWDY0X0RFQlVHICAgICAgICAgICAxDQojZGVmaW5lIEVYQ0VQVF9YNjRfTk1JICAgICAgICAgICAgIDINCiNkZWZpbmUgRVhDRVBUX1g2NF9CUkVBS1BPSU5UICAgICAgMw0KI2RlZmluZSBFWENFUFRfWDY0X09WRVJGTE9XICAgICAgICA0DQojZGVmaW5lIEVYQ0VQVF9YNjRfQk9VTkQgICAgICAgICAgIDUNCiNkZWZpbmUgRVhDRVBUX1g2NF9JTlZBTElEX09QQ09ERSAgNg0KI2RlZmluZSBFWENFUFRfWDY0X0RPVUJMRV9GQVVMVCAgICA4DQojZGVmaW5lIEVYQ0VQVF9YNjRfSU5WQUxJRF9UU1MgICAgIDEwDQojZGVmaW5lIEVYQ0VQVF9YNjRfU0VHX05PVF9QUkVTRU5UIDExDQojZGVmaW5lIEVYQ0VQVF9YNjRfU1RBQ0tfRkFVTFQgICAgIDEyDQojZGVmaW5lIEVYQ0VQVF9YNjRfR1BfRkFVTFQgICAgICAgIDEzDQojZGVmaW5lIEVYQ0VQVF9YNjRfUEFHRV9GQVVMVCAgICAgIDE0DQojZGVmaW5lIEVYQ0VQVF9YNjRfRlBfRVJST1IgICAgICAgIDE2DQojZGVmaW5lIEVYQ0VQVF9YNjRfQUxJR05NRU5UX0NIRUNLIDE3DQojZGVmaW5lIEVYQ0VQVF9YNjRfTUFDSElORV9DSEVDSyAgIDE4DQojZGVmaW5lIEVYQ0VQVF9YNjRfU0lNRCAgICAgICAgICAgIDE5DQoNCi8vDQovLyAgWDY0IHByb2Nlc3NvciBjb250ZXh0IGRlZmluaXRpb24NCi8vDQovLyBGWFNBVkVfU1RBVEUNCi8vIEZQIC8gTU1YIC8gWE1NIHJlZ2lzdGVycyAoc2VlIGZ4cnN0b3IgaW5zdHJ1Y3Rpb24gZGVmaW5pdGlvbikNCi8vDQp0eXBlZGVmIHN0cnVjdCB7DQogIFVJTlQxNiAgRmN3Ow0KICBVSU5UMTYgIEZzdzsNCiAgVUlOVDE2ICBGdHc7DQogIFVJTlQxNiAgT3Bjb2RlOw0KICBVSU5UNjQgIFJpcDsNCiAgVUlOVDY0ICBEYXRhT2Zmc2V0Ow0KICBVSU5UOCAgIFJlc2VydmVkMVs4XTsNCiAgVUlOVDggICBTdDBNbTBbMTBdLCBSZXNlcnZlZDJbNl07DQogIFVJTlQ4ICAgU3QxTW0xWzEwXSwgUmVzZXJ2ZWQzWzZdOw0KICBVSU5UOCAgIFN0Mk1tMlsxMF0sIFJlc2VydmVkNFs2XTsNCiAgVUlOVDggICBTdDNNbTNbMTBdLCBSZXNlcnZlZDVbNl07DQogIFVJTlQ4ICAgU3Q0TW00WzEwXSwgUmVzZXJ2ZWQ2WzZdOw0KICBVSU5UOCAgIFN0NU1tNVsxMF0sIFJlc2VydmVkN1s2XTsNCiAgVUlOVDggICBTdDZNbTZbMTBdLCBSZXNlcnZlZDhbNl07DQogIFVJTlQ4ICAgU3Q3TW03WzEwXSwgUmVzZXJ2ZWQ5WzZdOw0KICBVSU5UOCAgIFhtbTBbMTZdOw0KICBVSU5UOCAgIFhtbTFbMTZdOw0KICBVSU5UOCAgIFhtbTJbMTZdOw0KICBVSU5UOCAgIFhtbTNbMTZdOw0KICBVSU5UOCAgIFhtbTRbMTZdOw0KICBVSU5UOCAgIFhtbTVbMTZdOw0KICBVSU5UOCAgIFhtbTZbMTZdOw0KICBVSU5UOCAgIFhtbTdbMTZdOw0KICBVSU5UOCAgIFJlc2VydmVkMTFbMTQgKiAxNl07DQp9IEVGSV9GWF9TQVZFX1NUQVRFX1g2NDsNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KICBVSU5UNjQgICAgICAgICAgICAgICAgRXhjZXB0aW9uRGF0YTsNCiAgRUZJX0ZYX1NBVkVfU1RBVEVfWDY0IEZ4U2F2ZVN0YXRlOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgRHIwOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgRHIxOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgRHIyOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgRHIzOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgRHI2Ow0KICBVSU5UNjQgICAgICAgICAgICAgICAgRHI3Ow0KICBVSU5UNjQgICAgICAgICAgICAgICAgQ3IwOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgQ3IxOyAgLyogUmVzZXJ2ZWQgKi8NCiAgVUlOVDY0ICAgICAgICAgICAgICAgIENyMjsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIENyMzsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIENyNDsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIENyODsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIFJmbGFnczsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIExkdHI7DQogIFVJTlQ2NCAgICAgICAgICAgICAgICBUcjsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIEdkdHJbMl07DQogIFVJTlQ2NCAgICAgICAgICAgICAgICBJZHRyWzJdOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgUmlwOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgR3M7DQogIFVJTlQ2NCAgICAgICAgICAgICAgICBGczsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIEVzOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgRHM7DQogIFVJTlQ2NCAgICAgICAgICAgICAgICBDczsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIFNzOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgUmRpOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgUnNpOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgUmJwOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgUnNwOw0KICBVSU5UNjQgICAgICAgICAgICAgICAgUmJ4Ow0KICBVSU5UNjQgICAgICAgICAgICAgICAgUmR4Ow0KICBVSU5UNjQgICAgICAgICAgICAgICAgUmN4Ow0KICBVSU5UNjQgICAgICAgICAgICAgICAgUmF4Ow0KICBVSU5UNjQgICAgICAgICAgICAgICAgUjg7DQogIFVJTlQ2NCAgICAgICAgICAgICAgICBSOTsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIFIxMDsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIFIxMTsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIFIxMjsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIFIxMzsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIFIxNDsNCiAgVUlOVDY0ICAgICAgICAgICAgICAgIFIxNTsNCn0gRUZJX1NZU1RFTV9DT05URVhUX1g2NDsNCg0KLy8NCi8vICBJUEYgcHJvY2Vzc29yIGV4Y2VwdGlvbiB0eXBlcw0KLy8NCiNkZWZpbmUgRVhDRVBUX0lQRl9WSFRQX1RSQU5TTEFUSU9OICAgICAgIDANCiNkZWZpbmUgRVhDRVBUX0lQRl9JTlNUUlVDVElPTl9UTEIgICAgICAgIDENCiNkZWZpbmUgRVhDRVBUX0lQRl9EQVRBX1RMQiAgICAgICAgICAgICAgIDINCiNkZWZpbmUgRVhDRVBUX0lQRl9BTFRfSU5TVFJVQ1RJT05fVExCICAgIDMNCiNkZWZpbmUgRVhDRVBUX0lQRl9BTFRfREFUQV9UTEIgICAgICAgICAgIDQNCiNkZWZpbmUgRVhDRVBUX0lQRl9EQVRBX05FU1RFRF9UTEIgICAgICAgIDUNCiNkZWZpbmUgRVhDRVBUX0lQRl9JTlNUUlVDVElPTl9LRVlfTUlTU0VEIDYNCiNkZWZpbmUgRVhDRVBUX0lQRl9EQVRBX0tFWV9NSVNTRUQgICAgICAgIDcNCiNkZWZpbmUgRVhDRVBUX0lQRl9ESVJUWV9CSVQgICAgICAgICAgICAgIDgNCiNkZWZpbmUgRVhDRVBUX0lQRl9JTlNUUlVDVElPTl9BQ0NFU1NfQklUIDkNCiNkZWZpbmUgRVhDRVBUX0lQRl9EQVRBX0FDQ0VTU19CSVQgICAgICAgIDEwDQojZGVmaW5lIEVYQ0VQVF9JUEZfQlJFQUtQT0lOVCAgICAgICAgICAgICAxMQ0KI2RlZmluZSBFWENFUFRfSVBGX0VYVEVSTkFMX0lOVEVSUlVQVCAgICAgMTINCi8vDQovLyAxMyAtIDE5IHJlc2VydmVkDQovLw0KI2RlZmluZSBFWENFUFRfSVBGX1BBR0VfTk9UX1BSRVNFTlQgICAgICAgICAgIDIwDQojZGVmaW5lIEVYQ0VQVF9JUEZfS0VZX1BFUk1JU1NJT04gICAgICAgICAgICAgMjENCiNkZWZpbmUgRVhDRVBUX0lQRl9JTlNUUlVDVElPTl9BQ0NFU1NfUklHSFRTICAyMg0KI2RlZmluZSBFWENFUFRfSVBGX0RBVEFfQUNDRVNTX1JJR0hUUyAgICAgICAgIDIzDQojZGVmaW5lIEVYQ0VQVF9JUEZfR0VORVJBTF9FWENFUFRJT04gICAgICAgICAgMjQNCiNkZWZpbmUgRVhDRVBUX0lQRl9ESVNBQkxFRF9GUF9SRUdJU1RFUiAgICAgICAyNQ0KI2RlZmluZSBFWENFUFRfSVBGX05BVF9DT05TVU1QVElPTiAgICAgICAgICAgIDI2DQojZGVmaW5lIEVYQ0VQVF9JUEZfU1BFQ1VMQVRJT04gICAgICAgICAgICAgICAgMjcNCi8vDQovLyAyOCByZXNlcnZlZA0KLy8NCiNkZWZpbmUgRVhDRVBUX0lQRl9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAgMjkNCiNkZWZpbmUgRVhDRVBUX0lQRl9VTkFMSUdORURfUkVGRVJFTkNFICAgICAgICAgICAgMzANCiNkZWZpbmUgRVhDRVBUX0lQRl9VTlNVUFBPUlRFRF9EQVRBX1JFRkVSRU5DRSAgICAgMzENCiNkZWZpbmUgRVhDRVBUX0lQRl9GUF9GQVVMVCAgICAgICAgICAgICAgICAgICAgICAgMzINCiNkZWZpbmUgRVhDRVBUX0lQRl9GUF9UUkFQICAgICAgICAgICAgICAgICAgICAgICAgMzMNCiNkZWZpbmUgRVhDRVBUX0lQRl9MT1dFUl9QUklWSUxFR0VfVFJBTlNGRVJfVFJBUCAgMzQNCiNkZWZpbmUgRVhDRVBUX0lQRl9UQUtFTl9CUkFOQ0ggICAgICAgICAgICAgICAgICAgMzUNCiNkZWZpbmUgRVhDRVBUX0lQRl9TSU5HTEVfU1RFUCAgICAgICAgICAgICAgICAgICAgMzYNCi8vDQovLyAzNyAtIDQ0IHJlc2VydmVkDQovLw0KI2RlZmluZSBFWENFUFRfSVBGX0lBMzJfRVhDRVBUSU9OIDQ1DQojZGVmaW5lIEVYQ0VQVF9JUEZfSUEzMl9JTlRFUkNFUFQgNDYNCiNkZWZpbmUgRVhDRVBUX0lQRl9JQTMyX0lOVEVSUlVQVCA0Nw0KDQovLw0KLy8gIElQRiBwcm9jZXNzb3IgY29udGV4dCBkZWZpbml0aW9uDQovLw0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAvLw0KICAvLyBUaGUgZmlyc3QgcmVzZXJ2ZWQgZmllbGQgaXMgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIGFsaWdubWVudCBmb3IgdGhlIGNvcnJlY3QNCiAgLy8gYml0cyBpbiBVTkFUIGFuZCB0byBpbnN1cmUgRjIgaXMgMTYgYnl0ZSBhbGlnbmVkLi4NCiAgLy8NCiAgVUlOVDY0ICBSZXNlcnZlZDsNCiAgVUlOVDY0ICBSMTsNCiAgVUlOVDY0ICBSMjsNCiAgVUlOVDY0ICBSMzsNCiAgVUlOVDY0ICBSNDsNCiAgVUlOVDY0ICBSNTsNCiAgVUlOVDY0ICBSNjsNCiAgVUlOVDY0ICBSNzsNCiAgVUlOVDY0ICBSODsNCiAgVUlOVDY0ICBSOTsNCiAgVUlOVDY0ICBSMTA7DQogIFVJTlQ2NCAgUjExOw0KICBVSU5UNjQgIFIxMjsNCiAgVUlOVDY0ICBSMTM7DQogIFVJTlQ2NCAgUjE0Ow0KICBVSU5UNjQgIFIxNTsNCiAgVUlOVDY0ICBSMTY7DQogIFVJTlQ2NCAgUjE3Ow0KICBVSU5UNjQgIFIxODsNCiAgVUlOVDY0ICBSMTk7DQogIFVJTlQ2NCAgUjIwOw0KICBVSU5UNjQgIFIyMTsNCiAgVUlOVDY0ICBSMjI7DQogIFVJTlQ2NCAgUjIzOw0KICBVSU5UNjQgIFIyNDsNCiAgVUlOVDY0ICBSMjU7DQogIFVJTlQ2NCAgUjI2Ow0KICBVSU5UNjQgIFIyNzsNCiAgVUlOVDY0ICBSMjg7DQogIFVJTlQ2NCAgUjI5Ow0KICBVSU5UNjQgIFIzMDsNCiAgVUlOVDY0ICBSMzE7DQoNCiAgVUlOVDY0ICBGMlsyXTsNCiAgVUlOVDY0ICBGM1syXTsNCiAgVUlOVDY0ICBGNFsyXTsNCiAgVUlOVDY0ICBGNVsyXTsNCiAgVUlOVDY0ICBGNlsyXTsNCiAgVUlOVDY0ICBGN1syXTsNCiAgVUlOVDY0ICBGOFsyXTsNCiAgVUlOVDY0ICBGOVsyXTsNCiAgVUlOVDY0ICBGMTBbMl07DQogIFVJTlQ2NCAgRjExWzJdOw0KICBVSU5UNjQgIEYxMlsyXTsNCiAgVUlOVDY0ICBGMTNbMl07DQogIFVJTlQ2NCAgRjE0WzJdOw0KICBVSU5UNjQgIEYxNVsyXTsNCiAgVUlOVDY0ICBGMTZbMl07DQogIFVJTlQ2NCAgRjE3WzJdOw0KICBVSU5UNjQgIEYxOFsyXTsNCiAgVUlOVDY0ICBGMTlbMl07DQogIFVJTlQ2NCAgRjIwWzJdOw0KICBVSU5UNjQgIEYyMVsyXTsNCiAgVUlOVDY0ICBGMjJbMl07DQogIFVJTlQ2NCAgRjIzWzJdOw0KICBVSU5UNjQgIEYyNFsyXTsNCiAgVUlOVDY0ICBGMjVbMl07DQogIFVJTlQ2NCAgRjI2WzJdOw0KICBVSU5UNjQgIEYyN1syXTsNCiAgVUlOVDY0ICBGMjhbMl07DQogIFVJTlQ2NCAgRjI5WzJdOw0KICBVSU5UNjQgIEYzMFsyXTsNCiAgVUlOVDY0ICBGMzFbMl07DQoNCiAgVUlOVDY0ICBQcjsNCg0KICBVSU5UNjQgIEIwOw0KICBVSU5UNjQgIEIxOw0KICBVSU5UNjQgIEIyOw0KICBVSU5UNjQgIEIzOw0KICBVSU5UNjQgIEI0Ow0KICBVSU5UNjQgIEI1Ow0KICBVSU5UNjQgIEI2Ow0KICBVSU5UNjQgIEI3Ow0KDQogIC8vDQogIC8vIGFwcGxpY2F0aW9uIHJlZ2lzdGVycw0KICAvLw0KICBVSU5UNjQgIEFyUnNjOw0KICBVSU5UNjQgIEFyQnNwOw0KICBVSU5UNjQgIEFyQnNwc3RvcmU7DQogIFVJTlQ2NCAgQXJSbmF0Ow0KDQogIFVJTlQ2NCAgQXJGY3I7DQoNCiAgVUlOVDY0ICBBckVmbGFnOw0KICBVSU5UNjQgIEFyQ3NkOw0KICBVSU5UNjQgIEFyU3NkOw0KICBVSU5UNjQgIEFyQ2ZsZzsNCiAgVUlOVDY0ICBBckZzcjsNCiAgVUlOVDY0ICBBckZpcjsNCiAgVUlOVDY0ICBBckZkcjsNCg0KICBVSU5UNjQgIEFyQ2N2Ow0KDQogIFVJTlQ2NCAgQXJVbmF0Ow0KDQogIFVJTlQ2NCAgQXJGcHNyOw0KDQogIFVJTlQ2NCAgQXJQZnM7DQogIFVJTlQ2NCAgQXJMYzsNCiAgVUlOVDY0ICBBckVjOw0KDQogIC8vDQogIC8vIGNvbnRyb2wgcmVnaXN0ZXJzDQogIC8vDQogIFVJTlQ2NCAgQ3JEY3I7DQogIFVJTlQ2NCAgQ3JJdG07DQogIFVJTlQ2NCAgQ3JJdmE7DQogIFVJTlQ2NCAgQ3JQdGE7DQogIFVJTlQ2NCAgQ3JJcHNyOw0KICBVSU5UNjQgIENySXNyOw0KICBVSU5UNjQgIENySWlwOw0KICBVSU5UNjQgIENySWZhOw0KICBVSU5UNjQgIENySXRpcjsNCiAgVUlOVDY0ICBDcklpcGE7DQogIFVJTlQ2NCAgQ3JJZnM7DQogIFVJTlQ2NCAgQ3JJaW07DQogIFVJTlQ2NCAgQ3JJaGE7DQoNCiAgLy8NCiAgLy8gZGVidWcgcmVnaXN0ZXJzDQogIC8vDQogIFVJTlQ2NCAgRGJyMDsNCiAgVUlOVDY0ICBEYnIxOw0KICBVSU5UNjQgIERicjI7DQogIFVJTlQ2NCAgRGJyMzsNCiAgVUlOVDY0ICBEYnI0Ow0KICBVSU5UNjQgIERicjU7DQogIFVJTlQ2NCAgRGJyNjsNCiAgVUlOVDY0ICBEYnI3Ow0KDQogIFVJTlQ2NCAgSWJyMDsNCiAgVUlOVDY0ICBJYnIxOw0KICBVSU5UNjQgIElicjI7DQogIFVJTlQ2NCAgSWJyMzsNCiAgVUlOVDY0ICBJYnI0Ow0KICBVSU5UNjQgIElicjU7DQogIFVJTlQ2NCAgSWJyNjsNCiAgVUlOVDY0ICBJYnI3Ow0KDQogIC8vDQogIC8vIHZpcnR1YWwgcmVnaXN0ZXJzIC0gbmF0IGJpdHMgZm9yIFIxLVIzMQ0KICAvLw0KICBVSU5UNjQgIEludE5hdDsNCg0KfSBFRklfU1lTVEVNX0NPTlRFWFRfSVBGOw0KDQovLw0KLy8gIEVCQyBwcm9jZXNzb3IgZXhjZXB0aW9uIHR5cGVzDQovLw0KI2RlZmluZSBFWENFUFRfRUJDX1VOREVGSU5FRCAgICAgICAgICAgIDANCiNkZWZpbmUgRVhDRVBUX0VCQ19ESVZJREVfRVJST1IgICAgICAgICAxDQojZGVmaW5lIEVYQ0VQVF9FQkNfREVCVUcgICAgICAgICAgICAgICAgMg0KI2RlZmluZSBFWENFUFRfRUJDX0JSRUFLUE9JTlQgICAgICAgICAgIDMNCiNkZWZpbmUgRVhDRVBUX0VCQ19PVkVSRkxPVyAgICAgICAgICAgICA0DQojZGVmaW5lIEVYQ0VQVF9FQkNfSU5WQUxJRF9PUENPREUgICAgICAgNSAgIC8vIG9wY29kZSBvdXQgb2YgcmFuZ2UNCiNkZWZpbmUgRVhDRVBUX0VCQ19TVEFDS19GQVVMVCAgICAgICAgICA2DQojZGVmaW5lIEVYQ0VQVF9FQkNfQUxJR05NRU5UX0NIRUNLICAgICAgNw0KI2RlZmluZSBFWENFUFRfRUJDX0lOU1RSVUNUSU9OX0VOQ09ESU5HIDggICAvLyBtYWxmb3JtZWQgaW5zdHJ1Y3Rpb24NCiNkZWZpbmUgRVhDRVBUX0VCQ19CQURfQlJFQUsgICAgICAgICAgICA5ICAgLy8gQlJFQUsgMCBvciB1bmRlZmluZWQgQlJFQUsNCiNkZWZpbmUgRVhDRVBUX0VCQ19TVEVQICAgICAgICAgICAgICAgICAxMCAgLy8gdG8gc3VwcG9ydCBkZWJ1ZyBzdGVwcGluZw0KLy8NCi8vIEZvciBjb2RpbmcgY29udmVuaWVuY2UsIGRlZmluZSB0aGUgbWF4aW11bSB2YWxpZCBFQkMgZXhjZXB0aW9uLg0KLy8NCiNkZWZpbmUgTUFYX0VCQ19FWENFUFRJT04gRVhDRVBUX0VCQ19TVEVQDQoNCi8vDQovLyAgRUJDIHByb2Nlc3NvciBjb250ZXh0IGRlZmluaXRpb24NCi8vDQp0eXBlZGVmIHN0cnVjdCB7DQogIFVJTlQ2NCAgUjA7DQogIFVJTlQ2NCAgUjE7DQogIFVJTlQ2NCAgUjI7DQogIFVJTlQ2NCAgUjM7DQogIFVJTlQ2NCAgUjQ7DQogIFVJTlQ2NCAgUjU7DQogIFVJTlQ2NCAgUjY7DQogIFVJTlQ2NCAgUjc7DQogIFVJTlQ2NCAgRmxhZ3M7DQogIFVJTlQ2NCAgQ29udHJvbEZsYWdzOw0KICBVSU5UNjQgIElwOw0KfSBFRklfU1lTVEVNX0NPTlRFWFRfRUJDOw0KDQovLw0KLy8gVW5pdmVyc2FsIEVGSV9TWVNURU1fQ09OVEVYVCBkZWZpbml0aW9uDQovLw0KdHlwZWRlZiB1bmlvbiB7DQogIEVGSV9TWVNURU1fQ09OVEVYVF9FQkMgICpTeXN0ZW1Db250ZXh0RWJjOw0KICBFRklfU1lTVEVNX0NPTlRFWFRfSUEzMiAqU3lzdGVtQ29udGV4dElhMzI7DQogIEVGSV9TWVNURU1fQ09OVEVYVF9YNjQgICpTeXN0ZW1Db250ZXh0WDY0Ow0KICBFRklfU1lTVEVNX0NPTlRFWFRfSVBGICAqU3lzdGVtQ29udGV4dElwZjsNCn0gRUZJX1NZU1RFTV9DT05URVhUOw0KDQovLw0KLy8gRGVidWdTdXBwb3J0IGNhbGxiYWNrIGZ1bmN0aW9uIHByb3RvdHlwZXMNCi8vDQoNCi8qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIFJlZ2lzdGVycyBhbmQgZW5hYmxlcyBhbiBleGNlcHRpb24gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uLg0KICAgIA0KICBAcGFyYW0gIEV4Y2VwdGlvblR5cGUgICAgICAgICBFeGNlcHRpb24gdHlwZXMgaW4gRUJDLCBJQS0zMiwgWDY0LCBvciBJUEYNCiAgQHBhcmFtICBTeXN0ZW1Db250ZXh0ICAgICAgICAgRXhjZXB0aW9uIGNvbnRlbnQuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKiovDQp0eXBlZGVmDQpWT0lEDQooKkVGSV9FWENFUFRJT05fQ0FMTEJBQ0spICgNCiAgSU4gICAgIEVGSV9FWENFUFRJT05fVFlQRSAgICAgICAgICAgICAgIEV4Y2VwdGlvblR5cGUsDQogIElOIE9VVCBFRklfU1lTVEVNX0NPTlRFWFQgICAgICAgICAgICAgICBTeXN0ZW1Db250ZXh0DQogICk7DQoNCi8qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIFJlZ2lzdGVycyBhbmQgZW5hYmxlcyB0aGUgb24tdGFyZ2V0IGRlYnVnIGFnZW50oa9zIHBlcmlvZGljIGVudHJ5IHBvaW50Lg0KICAgICAgDQogIEBwYXJhbSAgU3lzdGVtQ29udGV4dCAgICAgICAgIEV4Y2VwdGlvbiBjb250ZW50Lg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCioqLw0KdHlwZWRlZg0KVk9JRA0KKCpFRklfUEVSSU9ESUNfQ0FMTEJBQ0spICgNCiAgSU4gT1VUIEVGSV9TWVNURU1fQ09OVEVYVCAgICAgICAgICAgICAgIFN5c3RlbUNvbnRleHQNCiAgKTsNCg0KLy8NCi8vIE1hY2hpbmUgdHlwZSBkZWZpbml0aW9uDQovLw0KdHlwZWRlZiBlbnVtIHsNCiAgSXNhSWEzMiA9IElNQUdFX0ZJTEVfTUFDSElORV9JMzg2LCAvLyAweDAxNEMNCiAgSXNhWDY0ICA9IElNQUdFX0ZJTEVfTUFDSElORV9YNjQsICAgLy8gMHg4NjY0DQogIElzYUlwZiAgPSBJTUFHRV9GSUxFX01BQ0hJTkVfSUE2NCwgIC8vIDB4MDIwMA0KICBJc2FFYmMgID0gSU1BR0VfRklMRV9NQUNISU5FX0VCQyAgICAvLyAweDBFQkMNCn0gRUZJX0lOU1RSVUNUSU9OX1NFVF9BUkNISVRFQ1RVUkU7DQoNCg0KLy8NCi8vIERlYnVnU3VwcG9ydCBtZW1iZXIgZnVuY3Rpb24gZGVmaW5pdGlvbnMNCi8vDQoNCi8qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUgdGhhdCBtYXkgYmUgdXNlZCBmb3IgdGhlIFByb2Nlc3NvckluZGV4IHBhcmFtZXRlciBpbg0KICBSZWdpc3RlclBlcmlvZGljQ2FsbGJhY2soKSBhbmQgUmVnaXN0ZXJFeGNlcHRpb25DYWxsYmFjaygpLiAgICAgICAgICAgICAgICAgICANCiAgICANCiAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfREVCVUdfU1VQUE9SVF9QUk9UT0NPTCBpbnN0YW5jZS4NCiAgQHBhcmFtICBNYXhQcm9jZXNzb3JJbmRleCAgICAgUG9pbnRlciB0byBhIGNhbGxlci1hbGxvY2F0ZWQgVUlOVE4gaW4gd2hpY2ggdGhlIG1heGltdW0gc3VwcG9ydGVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NvciBpbmRleCBpcyByZXR1cm5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoqKi8NCnR5cGVkZWYNCkVGSV9TVEFUVVMNCihFRklBUEkgKkVGSV9HRVRfTUFYSU1VTV9QUk9DRVNTT1JfSU5ERVgpICgNCiAgSU4gRUZJX0RFQlVHX1NVUFBPUlRfUFJPVE9DT0wgICAgICAgICAgKlRoaXMsDQogIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpNYXhQcm9jZXNzb3JJbmRleA0KICApOw0KDQovKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYmFjayBwZXJpb2RpY2FsbHkgaW4gaW50ZXJydXB0IGNvbnRleHQuDQogICAgDQogIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RFQlVHX1NVUFBPUlRfUFJPVE9DT0wgaW5zdGFuY2UuDQogIEBwYXJhbSAgUHJvY2Vzc29ySW5kZXggICAgICAgIFNwZWNpZmllcyB3aGljaCBwcm9jZXNzb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFwcGxpZXMgdG8uDQogIEBwYXJhbSAgUGVyaW9kaWNDYWxsYmFjayAgICAgIEEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIG9mIHR5cGUgUEVSSU9ESUNfQ0FMTEJBQ0sgdGhhdCBpcyB0aGUgbWFpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJpb2RpYyBlbnRyeSBwb2ludCBvZiB0aGUgZGVidWcgYWdlbnQuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZnVuY3Rpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gIA0KICBAcmV0dmFsIEVGSV9BTFJFQURZX1NUQVJURUQgICBOb24tTlVMTCBQZXJpb2RpY0NhbGxiYWNrIHBhcmFtZXRlciB3aGVuIGEgY2FsbGJhY2sNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZC4gICAgICAgICAgICAgICAgDQogIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFN5c3RlbSBoYXMgaW5zdWZmaWNpZW50IG1lbW9yeSByZXNvdXJjZXMgdG8gcmVnaXN0ZXIgbmV3IGNhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCioqLw0KdHlwZWRlZg0KRUZJX1NUQVRVUw0KKEVGSUFQSSAqRUZJX1JFR0lTVEVSX1BFUklPRElDX0NBTExCQUNLKSAoDQogIElOIEVGSV9ERUJVR19TVVBQT1JUX1BST1RPQ09MICAgICAgICAgICpUaGlzLA0KICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3JJbmRleCwNCiAgSU4gRUZJX1BFUklPRElDX0NBTExCQUNLICAgICAgICAgICAgICAgUGVyaW9kaWNDYWxsYmFjaw0KICApOw0KDQovKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIGdpdmVuIHByb2Nlc3NvciBleGNlcHRpb24gb2NjdXJzLg0KICAgIA0KICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9ERUJVR19TVVBQT1JUX1BST1RPQ09MIGluc3RhbmNlLg0KICBAcGFyYW0gIFByb2Nlc3NvckluZGV4ICAgICAgICBTcGVjaWZpZXMgd2hpY2ggcHJvY2Vzc29yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhcHBsaWVzIHRvLg0KICBAcGFyYW0gIFBlcmlvZGljQ2FsbGJhY2sgICAgICBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBvZiB0eXBlIEVYQ0VQVElPTl9DQUxMQkFDSyB0aGF0IGlzIGNhbGxlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBwcm9jZXNzb3IgZXhjZXB0aW9uIHNwZWNpZmllZCBieSBFeGNlcHRpb25UeXBlIG9jY3Vycy4gIA0KICBAcGFyYW0gIEV4Y2VwdGlvblR5cGUgICAgICAgICBTcGVjaWZpZXMgd2hpY2ggcHJvY2Vzc29yIGV4Y2VwdGlvbiB0byBob29rLiAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZnVuY3Rpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gIA0KICBAcmV0dmFsIEVGSV9BTFJFQURZX1NUQVJURUQgICBOb24tTlVMTCBQZXJpb2RpY0NhbGxiYWNrIHBhcmFtZXRlciB3aGVuIGEgY2FsbGJhY2sNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZC4gICAgICAgICAgICAgICAgDQogIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFN5c3RlbSBoYXMgaW5zdWZmaWNpZW50IG1lbW9yeSByZXNvdXJjZXMgdG8gcmVnaXN0ZXIgbmV3IGNhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCioqLw0KdHlwZWRlZg0KRUZJX1NUQVRVUw0KKEVGSUFQSSAqRUZJX1JFR0lTVEVSX0VYQ0VQVElPTl9DQUxMQkFDSykgKA0KICBJTiBFRklfREVCVUdfU1VQUE9SVF9QUk9UT0NPTCAgICAgICAgICAqVGhpcywNCiAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc29ySW5kZXgsDQogIElOIEVGSV9FWENFUFRJT05fQ0FMTEJBQ0sgICAgICAgICAgICAgIEV4Y2VwdGlvbkNhbGxiYWNrLA0KICBJTiBFRklfRVhDRVBUSU9OX1RZUEUgICAgICAgICAgICAgICAgICBFeGNlcHRpb25UeXBlDQogICk7DQoNCi8qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIEludmFsaWRhdGVzIHByb2Nlc3NvciBpbnN0cnVjdGlvbiBjYWNoZSBmb3IgYSBtZW1vcnkgcmFuZ2UuIFN1YnNlcXVlbnQgZXhlY3V0aW9uIGluIHRoaXMgcmFuZ2UNCiAgY2F1c2VzIGEgZnJlc2ggbWVtb3J5IGZldGNoIHRvIHJldHJpZXZlIGNvZGUgdG8gYmUgZXhlY3V0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9ERUJVR19TVVBQT1JUX1BST1RPQ09MIGluc3RhbmNlLg0KICBAcGFyYW0gIFByb2Nlc3NvckluZGV4ICAgICAgICBTcGVjaWZpZXMgd2hpY2ggcHJvY2Vzc29yoa9zIGluc3RydWN0aW9uIGNhY2hlIGlzIHRvIGJlIGludmFsaWRhdGVkLg0KICBAcGFyYW0gIFN0YXJ0ICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBoeXNpY2FsIGJhc2Ugb2YgdGhlIG1lbW9yeSByYW5nZSB0byBiZSBpbnZhbGlkYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBAcGFyYW0gIExlbmd0aCAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBwcm9jZXNzb3Khr3MgaW5zdHJ1Y3Rpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUgdG8gaW52YWxpZGF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZnVuY3Rpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCioqLw0KdHlwZWRlZg0KRUZJX1NUQVRVUw0KKEVGSUFQSSAqRUZJX0lOVkFMSURBVEVfSU5TVFJVQ1RJT05fQ0FDSEUpICgNCiAgSU4gRUZJX0RFQlVHX1NVUFBPUlRfUFJPVE9DT0wgICAgICAgICAgKlRoaXMsDQogIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvckluZGV4LA0KICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqU3RhcnQsDQogIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aA0KICApOw0KDQovLw0KLy8gRGVidWdTdXBwb3J0IHByb3RvY29sIGRlZmluaXRpb24NCi8vDQpzdHJ1Y3QgX0VGSV9ERUJVR19TVVBQT1JUX1BST1RPQ09MIHsNCiAgRUZJX0lOU1RSVUNUSU9OX1NFVF9BUkNISVRFQ1RVUkUgIElzYTsNCiAgRUZJX0dFVF9NQVhJTVVNX1BST0NFU1NPUl9JTkRFWCAgIEdldE1heGltdW1Qcm9jZXNzb3JJbmRleDsNCiAgRUZJX1JFR0lTVEVSX1BFUklPRElDX0NBTExCQUNLICAgIFJlZ2lzdGVyUGVyaW9kaWNDYWxsYmFjazsNCiAgRUZJX1JFR0lTVEVSX0VYQ0VQVElPTl9DQUxMQkFDSyAgIFJlZ2lzdGVyRXhjZXB0aW9uQ2FsbGJhY2s7DQogIEVGSV9JTlZBTElEQVRFX0lOU1RSVUNUSU9OX0NBQ0hFICBJbnZhbGlkYXRlSW5zdHJ1Y3Rpb25DYWNoZTsNCn07DQoNCmV4dGVybiBFRklfR1VJRCBnRWZpRGVidWdTdXBwb3J0UHJvdG9jb2xHdWlkOw0KDQojZW5kaWYgDQo=