Ci8vICAgdmltOnR3PTExMDp0cz00OgojaWZuZGVmIEhDRl9ICiNkZWZpbmUgSENGX0ggMQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRklMRQkgOiBoY2YuaAoqCiogREFURSAgIDogJERhdGU6IDIwMDQvMDgvMDUgMTE6NDc6MTAgJCAgICRSZXZpc2lvbjogMS43ICQKKiBPcmlnaW5hbDogMjAwNC8wNS8xOSAwNzoyNjowMSAgICBSZXZpc2lvbjogMS41NiAgICAgIFRhZzogaGNmN190MjAwNDA2MDJfMDEKKiBPcmlnaW5hbDogMjAwNC8wNS8xMiAwODo0NzoyMyAgICBSZXZpc2lvbjogMS41MyAgICAgIFRhZzogaGNmN190N18yMDA0MDUxM18wMQoqIE9yaWdpbmFsOiAyMDA0LzA0LzE1IDA5OjI0OjQyICAgIFJldmlzaW9uOiAxLjQ2ICAgICAgVGFnOiBoY2Y3X3Q3XzIwMDQwNDE1XzAxCiogT3JpZ2luYWw6IDIwMDQvMDQvMDggMTU6MTg6MTYgICAgUmV2aXNpb246IDEuNDUgICAgICBUYWc6IHQ3XzIwMDQwNDEzXzAxCiogT3JpZ2luYWw6IDIwMDQvMDQvMDEgMTU6MzI6NTUgICAgUmV2aXNpb246IDEuNDMgICAgICBUYWc6IHQ3XzIwMDQwNDAxXzAxCiogT3JpZ2luYWw6IDIwMDQvMDMvMTAgMTU6Mzk6MjggICAgUmV2aXNpb246IDEuMzkgICAgICBUYWc6IHQyMDA0MDMxMF8wMQoqIE9yaWdpbmFsOiAyMDA0LzAzLzA0IDExOjAzOjM4ICAgIFJldmlzaW9uOiAxLjM3ICAgICAgVGFnOiB0MjAwNDAzMDRfMDEKKiBPcmlnaW5hbDogMjAwNC8wMy8wMiAxNDo1MToyMSAgICBSZXZpc2lvbjogMS4zNSAgICAgIFRhZzogdDIwMDQwMzAyXzAzCiogT3JpZ2luYWw6IDIwMDQvMDIvMjQgMTM6MDA6MjggICAgUmV2aXNpb246IDEuMjggICAgICBUYWc6IHQyMDA0MDIyNF8wMQoqIE9yaWdpbmFsOiAyMDA0LzAyLzA5IDE0OjUwOjE0ICAgIFJldmlzaW9uOiAxLjI2ICAgICAgVGFnOiB0MjAwNDAyMTlfMDEKKgoqIEFVVEhPUiA6IE5pY28gVmFsc3RlcgoqCiogU1BFQ0lGSUNBVElPTjogLi4uLi4uLi4uLgoqCiogREVTQyAgIDogRGVmaW5pdGlvbnMgYW5kIFByb3RvdHlwZXMgZm9yIE1TRiBhcyB3ZWxsIGFzIEhDRiBzb3VyY2VzCioKKgkJICAgQ3VzdG9taXphYmxlIHZpYSBIQ0ZDRkcuSAoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKgoqIFNPRlRXQVJFIExJQ0VOU0UKKgoqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAoqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCiogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgoqCiogQ09QWVJJR0hUIKkgMTk5NCAtIDE5OTUJYnkgQVQmVC4JCQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAoqIENPUFlSSUdIVCCpIDE5OTYgLSAyMDAwIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMuCUFsbCBSaWdodHMgUmVzZXJ2ZWQKKiBDT1BZUklHSFQgqSAyMDAxIC0gMjAwNAlieSBBZ2VyZSBTeXN0ZW1zIEluYy4JQWxsIFJpZ2h0cyBSZXNlcnZlZAoqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCioKKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAoqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKgoqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCiogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKiAgICBkaXN0cmlidXRpb24uCioKKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCioKKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwoqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQoqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoqCiogRGlzY2xhaW1lcgoqCiogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCiogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgoqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgoqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwoqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAoqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICiogREFNQUdFLgoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgojaW5jbHVkZSAiaGNmY2ZnLmgiCS8vIFN5c3RlbSBDb25zdGFudHMgdG8gYmUgZGVmaW5lZCBieSB0aGUgTVNGLXByb2dyYW1tZXIgdG8gdGFpbG9yIHRoZSBIQ0YKI2luY2x1ZGUgIm1kZC5oIgkvLyBJbmNsdWRlIGZpbGUgY29tbW9uIGZvciBIQ0YsIE1TRgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgTUFDUk9TICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojZGVmaW5lIExPRih4KSAJCQkoc2l6ZW9mKHgpL3NpemVvZihoY2ZfMTYpLTEpCgovKglFbmRpYW5lc3MKICoJTGl0dGxlIEVuZGlhbiAoYS5rLmEuIEludGVsKSwgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdAogKglCaWcgRW5kaWFuIChhLmsuYS4gTW90b3JvbGEpLCBtb3N0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QKICoKICogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHN1cHBsaWVkCiAqICBvIENOVl9MSVRUTEVfVE9fU0hPUlQodykJCQlpbnRlcnByZXRzIHRoZSAxNi1iaXRzIGlucHV0IHZhbHVlIGFzIExpdHRsZSBFbmRpYW4sIHJldHVybnMgYW4gaGNmXzE2CiAqIAlvIENOVl9CSUdfVE9fU0hPUlQodykJCQkJaW50ZXJwcmV0cyB0aGUgMTYtYml0cyBpbnB1dCB2YWx1ZSBhcyBCaWcgRW5kaWFuLCByZXR1cm5zIGFuIGhjZl8xNgogKgogKi8KCi8qIFRvIGluY3JlYXNlIHBvcnRhYmlsaXR5LCB1c2UgdW5zaWduZWQgY2hhciBhbmQgdW5zaWduZWQgY2hhciAqIHdoZW4gYWNjZXNzaW5nIHBhcnRzIG9mIGxhcmdlcgogKiB0eXBlcyB0byBjb252ZXJ0IHRoZWlyIEVuZGlhbmVzcwogKi8KCiNkZWZpbmUgQ05WX0VORF9TSE9SVCh3KSAgKGhjZl8xNikoICgoaGNmXzE2KSh3KSAmIDB4MDBGRikgPDwgOCB8ICgoaGNmXzE2KSh3KSAmIDB4RkYwMCkgPj4gOCApCiNkZWZpbmUgQ05WX0VORF9MT05HKGR3KSAgKGhjZl8zMikoIChkdyA+PiAyNCkgfCAoKGR3ID4+IDgpICYgMHhmZjAwKSB8ICgoZHcgPDwgOCkgJiAweGZmMDAwMCkgfCAoZHcgPDwgMjQpICkKCiNpZiBIQ0ZfQklHX0VORElBTgovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEIgSSBHICAgRSBOIEQgSSBBIE4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojZGVmaW5lIENOVl9MSVRUTEVfVE9fU0hPUlQodykJQ05WX0VORF9TSE9SVCh3KQkvLyAgICBlbmRpYW5lc3MgY29udmVyc2lvbiBuZWVkZWQKI2RlZmluZSBDTlZfQklHX1RPX1NIT1JUKHcpCQkodykJCQkJLy8gbm8gZW5kaWFuZXNzIGNvbnZlcnNpb24gbmVlZGVkCiNkZWZpbmUgQ05WX0xJVFRMRV9UT19MT05HKGR3KQlDTlZfRU5EX0xPTkcoZHcpCiNkZWZpbmUgQ05WX0xPTkdfVE9fTElUVExFKGR3KQlDTlZfRU5EX0xPTkcoZHcpCiNlbHNlCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEwgSSBUIFQgTCBFICAgRSBOIEQgSSBBIE4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojZGVmaW5lIENOVl9MSVRUTEVfVE9fU0hPUlQodykgCSh3KQkJCQkvLyBubyBlbmRpYW5lc3MgY29udmVyc2lvbiBuZWVkZWQKI2RlZmluZSBDTlZfQklHX1RPX1NIT1JUKHcpCQlDTlZfRU5EX1NIT1JUKHcpCS8vICAgIGVuZGlhbmVzcyBjb252ZXJzaW9uIG5lZWRlZAojZGVmaW5lIENOVl9MSVRUTEVfVE9fTE9ORyhkdykJKGR3KQojZGVmaW5lIENOVl9MT05HX1RPX0xJVFRMRShkdykJKGR3KQoKI2lmIGRlZmluZWQgSENGX0FMSUdOICYmIEhDRl9BTElHTiA+IDEKI2RlZmluZSBDTlZfU0hPUlRQX1RPX0xJVFRMRShwdykJKChoY2ZfMTYpKCooaGNmXzggKilwdykpIAkJCXwgKChoY2ZfMTYpKCooKGhjZl84ICopcHcrMSkpIDw8IDgpCiNkZWZpbmUgQ05WX0xPTkdQX1RPX0xJVFRMRShwZHcpCSgoaGNmXzMyKSgqKGhjZl84ICopcGR3KSkgCQkJfCAoKGhjZl8zMikoKigoaGNmXzggKilwZHcrMSkpIDw8IDgpIAl8IFwKCQkJCQkJCQkJKChoY2ZfMzIpKCooKGhjZl84ICopcGR3KzIpKSA8PCAxNikgfCAoKGhjZl8zMikoKigoaGNmXzggKilwZHcrMykpIDw8IDI0KQojZWxzZQojZGVmaW5lIENOVl9MT05HUF9UT19MSVRUTEUocGR3KQkoKihoY2ZfMzIgKilwZHcpCiNkZWZpbmUgQ05WX1NIT1JUUF9UT19MSVRUTEUocHcpCSgqKGhjZl8xNiAqKXB3KQojZW5kaWYKCiNlbmRpZiAvLyBIQ0ZfQklHX0VORElBTgoKLy8gY29udmVyc2lvbiBtYWNyb3Mgd2hpY2ggY2FuIGJlIGV4cHJlc3NlZCBpbiBvdGhlciBtYWNyb3MKI2RlZmluZSBDTlZfU0hPUlRfVE9fTElUVExFKHcpCUNOVl9MSVRUTEVfVE9fU0hPUlQodykKI2RlZmluZSBDTlZfU0hPUlRfVE9fQklHKHcpCQlDTlZfQklHX1RPX1NIT1JUKHcpCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIEVORCBPRiBNQUNST1MgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8vIG9mZnNldHMgVHJhbnNtaXQvUmVjZWl2ZSBGcmFtZSBTdHJ1Y3R1cmUKI2RlZmluZSBIRlNfU1RBVAkJCQkweDAwMDAKI2RlZmluZSBIRlNfU1dTVVAJCQkJMHgwMDA2CQkJCQkvL1NXIFN1cHBvcnQKI2RlZmluZSBIRlNfUV9JTkZPCQkJCTB4MDAwNgkJCQkJLy9TaWduYWwvU2lsZW5jZSBsZXZlbAojZGVmaW5lIEhGU19SQVRFCQkJCTB4MDAwOAkJCQkJLy9SeEZsb3cvUmF0ZQojZGVmaW5lIAlIRlNfU1RBVF9FUlIJCVJYX1NUQVRfRVJSCQkJCS8vbGluayAibmF0dXJhbCIgSENGIG5hbWUgdG8gIm5hdHVyYWwiIE1TRiBuYW1lCiNkZWZpbmUgSEZTX1RYX0NOVEwJCQkJMHgwMDM2CgkJCQkJCQkJCQkJCQkJLy8gSC1JICAgICBILUlJCiNkZWZpbmUgSEZTX0RBVF9MRU4JCQkJKEhGU19BRERSX0RFU1QgLSAyKQkJLy8gMHgwMDJDICAweDAwMzgKI2RlZmluZSBIRlNfQUREUl9ERVNUCQkJMHgwMDNBCQkJCQkvLyAweDAwMkUgIDB4MDAzQQojZGVmaW5lIEhGU19BRERSX1NSQwkJCShIRlNfQUREUl9ERVNUICsgNikJCS8vIDB4MDAzNCAgMHgwMDQwCiNkZWZpbmUgSEZTX0xFTgkJCQkJKEhGU19BRERSX1NSQyAgKyA2KQkJLy8gMHgwMDNBICAweDAwNDYKI2RlZmluZSBIRlNfREFUCQkJCQkoSEZTX0xFTiAgICAgICArIDIpCQkvLyAweDAwM0MgIDB4MDA0OAojZGVmaW5lIEhGU19UWVBFCQkJCShIRlNfREFUICAgICAgICsgNikJCS8vIDB4MDA0MiAgMHgwMDRFCgoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgRCBFIFMgQyBSIEkgUCBUIE8gUiAgIFMgVCBSIFUgQyBUIFUgUiBFICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy87P01ERC5IIHN0dWZmIDs/CgojaWYgSENGX0JJR19FTkRJQU4KI2RlZmluZSBERVNDX1NUUkNUX0NOVAkJMAojZGVmaW5lIERFU0NfU1RSQ1RfU0laRQkJMQojZWxzZQojZGVmaW5lIERFU0NfU1RSQ1RfQ05UCQkxCiNkZWZpbmUgREVTQ19TVFJDVF9TSVpFCQkwCiNlbmRpZiAvLyBIQ0ZfQklHX0VORElBTgoKI2RlZmluZQlCVUZfQ05UCQkJCWJ1Zl9kaW1bREVTQ19TVFJDVF9DTlRdCiNkZWZpbmUJQlVGX1NJWkUJCQlidWZfZGltW0RFU0NfU1RSQ1RfU0laRV0KCnR5cGVkZWYgc3RydWN0IERFU0NfU1RSQ1QgewoJaGNmXzE2CQkJCQlidWZfZGltWzJdOwoJaGNmXzMyCQkJCQlidWZfcGh5c19hZGRyOwoJaGNmXzMyCQkJCQluZXh0X2Rlc2NfcGh5c19hZGRyOwkvLyBwaHlzaWNhbCBhZGRyZXNzIG9mIG5leHQgZGVzY3JpcHRvcgoJaGNmXzMyCQkJCQlkZXNjX3BoeXNfYWRkcjsJCQkvLyBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgZGVzY3JpcHRvcgoJc3RydWN0IERFU0NfU1RSQ1QgCQkqbmV4dF9kZXNjX2FkZHI7CgloY2ZfOAlGQVIJCQkJKmJ1Zl9hZGRyOwojaWYgKEhDRl9FWFQpICYgSENGX0VYVF9ERVNDX1NUUkNUCgl2b2lkIEZBUgkJCSAgICpERVNDX01TRlN1cDsJCQkvLyBwb2ludGVyIGZvciBhcmJpdHJhcnkgdXNlIGJ5IHRoZSBNU0YKI2VuZGlmIC8vIEhDRl9ERVNDX1NUUkNUX0VYVAp9IERFU0NfU1RSQ1Q7CgojZGVmaW5lIEhDRl9EQVNBX1NJWkUJCQkxMgkJCQkJCQkvL3NpemUgaW4gYnl0ZXMgZm9yIERBL1NBCgojZGVmaW5lIERFU0NfQ05UX01BU0sgCQkJMHgwRkZGCgojZGVmaW5lIEdFVF9CVUZfU0laRShkZXNjcCkgICAgICAgKChkZXNjcCktPkJVRl9TSVpFKQojZGVmaW5lIEdFVF9CVUZfQ05UKGRlc2NwKSAgICAgICAgKChkZXNjcCktPkJVRl9DTlQpCiNkZWZpbmUgU0VUX0JVRl9TSVpFKGRlc2NwLCBzaXplKSAoZGVzY3ApLT5CVUZfU0laRSA9IHNpemU7CiNkZWZpbmUgU0VUX0JVRl9DTlQoZGVzY3AsIGNvdW50KSAoZGVzY3ApLT5CVUZfQ05UID0gY291bnQ7CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICBUIEEgTCBMIEkgRSBTICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCnR5cGVkZWYgc3RydWN0ICB7ICAvL0hlcm1lcyBUYWxsaWVzIChJRkIgc3Vic3RydWN0dXJlKQogIGhjZl8zMglUeFVuaWNhc3RGcmFtZXM7CiAgaGNmXzMyCVR4TXVsdGljYXN0RnJhbWVzOwogIGhjZl8zMglUeEZyYWdtZW50czsKICBoY2ZfMzIJVHhVbmljYXN0T2N0ZXRzOwogIGhjZl8zMglUeE11bHRpY2FzdE9jdGV0czsKICBoY2ZfMzIJVHhEZWZlcnJlZFRyYW5zbWlzc2lvbnM7CiAgaGNmXzMyCVR4U2luZ2xlUmV0cnlGcmFtZXM7CiAgaGNmXzMyCVR4TXVsdGlwbGVSZXRyeUZyYW1lczsKICBoY2ZfMzIJVHhSZXRyeUxpbWl0RXhjZWVkZWQ7CiAgaGNmXzMyCVR4RGlzY2FyZHM7CiAgaGNmXzMyCVJ4VW5pY2FzdEZyYW1lczsKICBoY2ZfMzIJUnhNdWx0aWNhc3RGcmFtZXM7CiAgaGNmXzMyCVJ4RnJhZ21lbnRzOwogIGhjZl8zMglSeFVuaWNhc3RPY3RldHM7CiAgaGNmXzMyCVJ4TXVsdGljYXN0T2N0ZXRzOwogIGhjZl8zMglSeEZDU0Vycm9yczsKICBoY2ZfMzIJUnhEaXNjYXJkc05vQnVmZmVyOwogIGhjZl8zMglUeERpc2NhcmRzV3JvbmdTQTsKICBoY2ZfMzIJUnhXRVBVbmRlY3J5cHRhYmxlOwogIGhjZl8zMglSeE1zZ0luTXNnRnJhZ21lbnRzOwogIGhjZl8zMglSeE1zZ0luQmFkTXNnRnJhZ21lbnRzOwogIGhjZl8zMglSeERpc2NhcmRzV0VQSUNWRXJyb3I7CiAgaGNmXzMyCVJ4RGlzY2FyZHNXRVBFeGNsdWRlZDsKI2lmIChIQ0ZfRVhUKSAmIEhDRl9FWFRfVEFMTElFU19GVwogIGhjZl8zMglUYWxsaWVzRXh0cmFbMzJdOwojZW5kaWYgLy8gSENGX0VYVF9UQUxMSUVTX0ZXCn0gQ0ZHX0hFUk1FU19UQUxMSUVTX1NUUkNUOwoKdHlwZWRlZiBzdHJ1Y3QgIHsgIC8vSENGIFRhbGxpZXMgKElGQiBzdWJzdHJ1Y3R1cmUpCiAgaGNmXzMyCU5vQnVmSW5mbzsgIAkJCQkvL05vIGJ1ZmZlciBhdmFpbGFibGUgZm9yIHVuc29saWNpdGVkIE5vdGlmeSBmcmFtZQogIGhjZl8zMglOb0J1Zk1COwkJCQkJLy9ObyBzcGFjZSBhdmFpbGFibGUgaW4gTWFpbEJveAogIGhjZl8zMglNaXNjRXJyOwkJCQkJLyogQ29tbWFuZCBlcnJvcnMKICAJCQkJCQkJCQkJICogIC0gdGltZSBvdXQgb24gY29tcGxldGlvbiBzeW5jaHJvbm91cyBwYXJ0IEhlcm1lcyBDb21tYW5kCiAgCQkJCQkJCQkJCSAqICAtIGNvbXBsZXRlZCBIZXJtZXMgQ29tbWFuZCBkb2Vzbid0IG1hdGNoIG9yaWdpbmFsIGNvbW1hbmQKICAJCQkJCQkJCQkJICogIC0gc3RhdHVzIG9mIGNvbXBsZXRlZCBIZXJtZXMgQ29tbWFuZCBjb250YWlucyBlcnJvciBiaXRzCiAgCQkJCQkJCQkJCSAqLwojaWYgKEhDRl9FWFQpICYgSENGX0VYVF9UQUxMSUVTX0ZXCiAgaGNmXzMyCUVuZ0NudFs4XTsKI2VuZGlmIC8vIEhDRl9FWFRfVEFMTElFU19GVwp9IENGR19IQ0ZfVEFMTElFU19TVFJDVDsKCi8vTm90ZSB0aGlzIHdheSB0byBkZWZpbmUgLi4uX1RBTF9DTlQgaW1wbGllcyB0aGF0IGFsbCB0YWxsaWVzIG11c3Qga2VlcCB0aGUgc2FtZSAoaGNmXzMyKSBzaXplCiNpZiAoSENGX1RBTExJRVMpICYgKCBIQ0ZfVEFMTElFU19OSUMgfCBIQ0ZfVEFMTElFU19IQ0YgKQojaWYgKEhDRl9UQUxMSUVTKSAmIEhDRl9UQUxMSUVTX05JQwkvL0hlcm1lcyB0YWxseSBzdXBwb3J0CiNkZWZpbmUJCUhDRl9OSUNfVEFMX0NOVAkoc2l6ZW9mKENGR19IRVJNRVNfVEFMTElFU19TVFJDVCkvIHNpemVvZihoY2ZfMzIpKQojZWxzZQojZGVmaW5lCQlIQ0ZfTklDX1RBTF9DTlQJMAojZW5kaWYgLy8gSENGX1RBTExJRVMKI2lmIChIQ0ZfVEFMTElFUykgJiBIQ0ZfVEFMTElFU19IQ0YJLy9IQ0YgdGFsbHkgc3VwcG9ydAojZGVmaW5lCQlIQ0ZfSENGX1RBTF9DTlQJKHNpemVvZihDRkdfSENGX1RBTExJRVNfU1RSQ1QpICAgLyBzaXplb2YoaGNmXzMyKSkKI2Vsc2UKI2RlZmluZQkJSENGX0hDRl9UQUxfQ05UCTAKI2VuZGlmIC8vIEhDRl9UQUxMSUVTCiNkZWZpbmUgSENGX1RPVF9UQUxfQ05UICggSENGX05JQ19UQUxfQ05UICsgSENGX05JQ19UQUxfQ05UICkKI2VuZGlmIC8vIEhDRl9UQUxMSUVTX05JQyAvIEhDRl9UQUxMSUVTX0hDRgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogSSBOIFQgRSBSIEYgQSBDIEUgICBCIEwgTyBDIEsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojZGVmaW5lIElGQl9WRVJTSU9OIDB4MEUJIAkJCS8vIGluaXRpYWxseSAwLCB0byBiZSBpbmNyZW1lbnRlZCBieSBldmVyeSBJRkIgbGF5b3V0IGNoYW5nZQoKdHlwZWRlZiBzdHJ1Y3QgIHsKICBoY2ZfaW8JCUlGQl9JT0Jhc2U7CQkJCS8vIEkvTyBhZGRyZXNzIG9mIEhlcm1lcyBjaGlwIGFzIHBhc3NlZCBieSBNU0YgYXQgaGNmX2Nvbm5lY3QgY2FsbAogIGhjZl8xNgkJSUZCX0lPUmFuZ2U7CQkJLy8gSS9PIFJhbmdlIHVzZWQgYnkgSGVybWVzIGNoaXAKICBoY2ZfMTYJCUlGQl9ETE1vZGU7CQkJCS8vIERvd25sb2FkIE1vZGUgc3RhdGUKICBoY2ZfMTYJCUlGQl9DbWQ7CQkJCS8vIGNtZCBpbiBwcm9ncmVzcyBmbGFnLCB0byBiZSBhY2stZWQgYmVmb3JlIG5leHQgY21kIGNhbiBiZSBpc3N1ZWQKICBoY2ZfMTYJCUlGQl9SeEZJRDsJCQkJLy8gRklEIG9mICJjdXJyZW50IiBSeEZTIChub24tRE1BIG1vZGUpCi8vOz8jaWYgdHhfZGVsYXkgb3B0aW9uCiAgaGNmXzE2CQlJRkJfVHhGSUQ7CQkJCS8vIGZpZCBzdG9yYWdlIGR1cmluZyAiZGVsYXllZCIgc2VuZAovLzs/I2VuZGlmIHR4X2RlbGF5IG9wdGlvbgogIGhjZl8xNgkJSUZCX1J4TGVuOwkJCQkvLwogIGhjZl8xNgkJSUZCX0RlZnVuY3RTdGF0OwkJLy8gQkFQIGluaXRpYWxpemF0aW9uIG9yIENtZCBDb21wbGV0aW9uIGZhaWxlZAogIGhjZl8xNgkJSUZCX0VyckNtZDsJCQkJLy8gY29udGVudHMgU3RhdHVzIHJlZyB3aGVuIGVycm9yIGJpdHMgYW5kL29yIG1pc21hdGNoIGluIGNtZF93YWl0CiAgaGNmXzE2CQlJRkJfRXJyUXVhbGlmaWVyOwkJLy8gY29udGVudHMgUmVzcDAgIHJlZyB3aGVuIGVycm9yIGJpdHMgYW5kL29yIG1pc21hdGNoIGluIGNtZF93YWl0CiAgaGNmXzE2CQlJRkJfbGFsOwkJCQkvLyBMb29rQWhlYWQgTGVuZ3RoCiAgd2NpX2J1ZnAJCUlGQl9sYXA7CQkJCS8vIExvb2tBaGVhZCBCdWZmZXIgcG9pbnRlcgogIGhjZl8xNgkJSUZCX0xpbmtTdGF0OwkJCS8vIExpbmsgU3RhdHVzCiAgaGNmXzE2CQlJRkJfRFNMaW5rU3RhdDsJCQkvLyBMaW5rIFN0YXR1cywgbmV3IHN0cmF0ZWd5IGludHJvZHVjZWQgZm9yIERlZXBTbGVlcAogIGhjZl8xNgkJSUZCX0NhcnJ5SW47CQkJLy8gY2FycnkgYW5kIGNhcnJ5LWZsYWcgdG8gbW92ZSAxIGJ5dGUgZnJvbSBvbmUgZ2V0X2ZyYWcgdG8gdGhlIG5leHQKICBoY2ZfMTYJCUlGQl9DYXJyeU91dDsJCQkvLyBjYXJyeSBhbmQgY2FycnktZmxhZyB0byBtb3ZlIDEgYnl0ZSBmcm9tIG9uZSBwdXRfZnJhZyB0byB0aGUgbmV4dAogIGhjZl8xNgkJSUZCX1ZlcnNpb247CQkJLy8gSUZCX1ZFUlNJT04sIGluY3JlbWVudGVkIGJ5IGV2ZXJ5IFNJR05JRklDQU5UIElGQiBsYXlvdXQgY2hhbmdlCiAgaGNmXzE2CQlJRkJfQ2FyZFN0YXQ7CQkJLy8gTklDIGVycm9yIC8gRi9XIGluY29tcGF0aWJpbGl0eSBzdGF0dXMKICBoY2ZfMTYgIAkJSUZCX1JzY0luZDsJCQkJLy8gbm9uLURNQTogVHhGSUQgYXZhaWxhYmxlLCBETUE6IGFsd2F5cyAxCiAgaGNmXzE2CQlJRkJfQ250bE9wdDsJCQkvLyBmbGFnczogMzIgYml0cyBJL08sIERNQSBhdmFpbGFibGUsIERNQSBlbmFibGVkCiAgaGNmXzE2CQlJRkJfQnVzVHlwZTsJCQkvLyBCdXNUeXBlLCBkZXJpdmVkIHZpYSBDRkdfTklDX0JVU19UWVBFCiAgQ0ZHX0ZXX0lERU5USVRZX1NUUkNUCSBJRkJfRldJZGVudGl0eTsgLyoga2VlcCBGV0lkZW50aXR5L1N1cCBhbmQgUFJJSWRlbnRpdHkvU3VwIGluIHNlcXVlbmNlCgkJCQkJCQkJCQkgICogYmVjYXVzZSBvZiB0aGUgKGR1bWIpIGNvcHkgaW4gaW5pdCgpICovCiNpZiBkZWZpbmVkIE1TRl9DT01QT05FTlRfSUQKICBDRkdfU1VQX1JBTkdFX1NUUkNUCSBJRkJfRldTdXA7CiAgQ0ZHX1BSSV9JREVOVElUWV9TVFJDVCBJRkJfUFJJSWRlbnRpdHk7CiAgQ0ZHX1NVUF9SQU5HRV9TVFJDVAkgSUZCX1BSSVN1cDsKICBDRkdfU1VQX1JBTkdFX1NUUkNUCSBJRkJfSFNJU3VwOwojZW5kaWYgLy8gTVNGX0NPTVBPTkVOVF9JRAojaWYgKEhDRl9FWFQpICYgSENGX0VYVF9JTkZPX0xPRwogIFJJRF9MT0dQCQlJRkJfUklETG9ncDsJCQkvLyBwb2ludGVyIHRvIFJJRF9MT0cgc3RydWN0dXJlCiNlbmRpZiAvLyBIQ0ZfRVhUX0lORk9fTE9HCiNpZiBIQ0ZfUFJPVF9USU1FCiAgaGNmXzMyCSAJSUZCX1RpY2tJbmk7CQkJLy8gaW5pdGlhbGl6YXRpb24gb2YgUy9XIGNvdW50ZXIgYmFzZWQgcHJvdGVjdGlvbiBsb29wCiNlbmRpZiAvLyBIQ0ZfUFJPVF9USU1FCiNpZiAoSENGX0VYVCkgJiBIQ0ZfRVhUX0lOVF9USUNLCiAgaW50CQkJSUZCX1RpY2tDbnQ7CQkJLy8gSGVybWVzIFRpbWVyIFRpY2sgQ291bnRlcgojZW5kaWYgLy8gSENGX0VYVF9JTlRfVElDSwojaWYgKEhDRl9FWFQpICYgSENGX0VYVF9NQgogIGhjZl8xNiAJICAgKklGQl9NQnA7CQkJCS8vIHBvaW50ZXIgdG8gdGhlIE1haWxCb3gKICBoY2ZfMTYJCUlGQl9NQlNpemU7CQkJCS8vIHNpemUgb2YgdGhlIE1haWxCb3gKICBoY2ZfMTYJCUlGQl9NQldwOwkJCQkvLyB6ZXJvLWJhc2VkIHdyaXRlIGluZGV4IGludG8gdGhlIE1haWxCb3gKICBoY2ZfMTYJCUlGQl9NQlJwOwkJCQkvLyB6ZXJvLWJhc2VkIHJlYWQgIGluZGV4IGludG8gdGhlIE1haWxCb3gKICBoY2ZfMTYJCUlGQl9NQkluZm9MZW47CQkJLy8gY29udGVudHMgb2YgTC1maWVsZCBvZiB0aGUgb2xkZXN0IGF2YWlsYWJsZSBNYWlsQm94SW5mb0Jsb2NrCiNlbmRpZiAvLyBIQ0ZfRVhUX01CCiNpZiAoSENGX1RZUEUpICYgSENGX1RZUEVfV1BBCiAgaGNmXzE2CQlJRkJfTUlDVHhDbnRsOwkJCS8vIE1JQyBiaXQgYW5kIEtleSBpbmRleCBpbiBUeENvbnRyb2wgZmllbGQgb2YgVHhGUwogIGhjZl8zMgkJSUZCX01JQ1R4S2V5WzJdOwkJLy8gY2FsY3VsYXRpbmcga2V5CiAgaGNmXzMyCQlJRkJfTUlDVHhbMl07ICAgCSAgCS8vIFR4IE1JQyBjYWxjdWxhdGlvbiBFbmdpbmUgc3RhdGUKICBoY2ZfMTYJCUlGQl9NSUNUeENhcnJ5OwkJCS8vIHRlbXAgbGVuZ3RoLCBjYXJyaWVzIG92ZXIgZnJvbSBvbmUgVHggZnJhZ21lbnQgdG8gYW5vdGhlcgogIGhjZl8xNgkJSUZCX01JQ1J4Q2Fycnk7CQkJLy8gdGVtcCBsZW5ndGgsIGNhcnJpZXMgb3ZlciBmcm9tIG9uZSBSeCBmcmFnbWVudCB0byBhbm90aGVyCiAgaGNmXzMyCQlJRkJfTUlDUnhLZXlbNCoyXTsJCS8vIDQgY2hlY2tpbmcga2V5cwogIGhjZl8zMgkJSUZCX01JQ1J4WzJdOyAJIAkJLy8gUnggTUlDIGNhbGN1bGF0aW9uIEVuZ2luZSBzdGF0ZQojZW5kaWYgLy8gSENGX1RZUEVfV1BBCiNpZiBIQ0ZfQVNTRVJUCiNpZiAoSENGX0FTU0VSVCkgJiBIQ0ZfQVNTRVJUX01CCiAgQ0ZHX01CX0lORk9fUkFOR0UxX1NUUkNUCUlGQl9Bc3NlcnRTdHJjdDsgLy8gQWRkIHNvbWUgY29tcGxpY2F0aW9uIHRvIHRoZSBIQ0YgYXMgcHJpemUgZm9yIHRoZSBuZXcgTVNGIEkvRgojZW5kaWYgLy8gSENGX0FTU0VSVF9NQgogIAkJCQkJCQkJCQkvLyB0YXJnZXQgb2YgYWJvdmUgSUZCX0Fzc2VydFN0cmN0CiAgaGNmXzE2CQlJRkJfQXNzZXJ0TGluZTsJCQkvLyAgLSBsaW5lIG51bWJlciAoICsgZW5jb2RlZCBtb2R1bGUgbmFtZSApCiAgaGNmXzE2CQlJRkJfQXNzZXJ0VHJhY2U7CQkvLyAgLSBiaXQgYmFzZWQgdHJhY2Ugb2YgYWxsIGhjZl8uLi4uIGludm9jYXRpb25zCiAgaGNmXzMyCQlJRkJfQXNzZXJ0UXVhbGlmaWVyOwkvLyAgLSBxdWFsaWZpZXIKICBoY2ZfMTYJCUlGQl9Bc3NlcnRMdmw7CQkJLy8gQXNzZXJ0IEZpbHRlcmluZywgTm90IHlldCBpbXBsZW1lbnRlZAogIGhjZl8xNgkJSUZCX0Fzc2VydFdoZXJlOwkJLy8gV2hlcmUgcGFyYW1ldGVyIG9mIHRoZSBBc3NlcnQgbWFjcm8KI2lmIChIQ0ZfQVNTRVJUKSAmICggSENGX0FTU0VSVF9MTktfTVNGX1JUTiB8IEhDRl9BU1NFUlRfUlRfTVNGX1JUTiApCiAgTVNGX0FTU0VSVF9SVE5QCUlGQl9Bc3NlcnRSdG47CQkvLyBNU0YgQXNzZXJ0IENhbGwgYmFjayByb3V0aW5lIChpbnNwaXJlZCBieSBHRUYsIERyRG9iYnMgTm92IDE5OTggKQojZW5kaWYgLy8gSENGX0FTU0VSVF9MTktfTVNGX1JUTgojaWYgKEhDRl9BU1NFUlQpICYgSENGX0FTU0VSVF9QUklOVEYJLy8gZW5naW5lZXJpbmcgZmFjaWx0eSBpbnRlbmRlZCBhcyBGL1cgZGVidWdnaW5nIGFpZAogICBoY2ZfMTYgICAgICAgSUZCX0RiZ1ByaW50Rl9DbnQ7CiAgIENGR19GV19QUklOVEZfQlVGRkVSX0xPQ0FUSU9OX1NUUkNUIElGQl9Gd1BmQnVmZjsKI2VuZGlmIC8vIEhDRl9BU1NFUlRfUFJJTlRGCiNlbmRpZiAvLyBIQ0ZfQVNTRVJUCiNpZiAhIGRlZmluZWQgSENGX0lOVF9PRkYKICBoY2ZfMTYgdm9sYXRpbGUgSUZCX0ludE9mZkNudDsJCS8vIDB4RkZGRiBiYXNlZCBIQ0ZfQUNUX0lOVF9PRkYgbmVzdGluZyBjb3VudGVyLCBEZWVwU2xlZXAgZmxhZwojZW5kaWYgLy8gSENGX0lOVF9PRkYKI2lmIChIQ0ZfVFlQRSkgJiBIQ0ZfVFlQRV9DQ1gKICBoY2ZfMTYgICAgICAgICBJRkJfQ0tJUFN0YXQ7CQkJLy8gQ0tJUCBTdGF0dXMgZmxhZwojZW5kaWYgLy8gSENGX1RZUEVfQ0NYCiNpZiAoSENGX1RBTExJRVMpICYgKCBIQ0ZfVEFMTElFU19OSUMgfCBIQ0ZfVEFMTElFU19IQ0YgKQkvL0hlcm1lcyBhbmQvb3IgSENGIHRhbGx5IHN1cHBvcnQKICBoY2ZfMzIJCUlGQl9TaWxseV95b3Vfc2hvdWxkX2FsaWduOwkvLzs/CiAgaGNmXzE2CQlJRkJfVGFsbHlMZW47CQkJLy8gVGFsbHkgbGVuZ3RoICh0byBidWlsZCBhbiBMVFYpCiAgaGNmXzE2CQlJRkJfVGFsbHlUeXA7CQkJLy8gVGFsbHkgVHlwZSAodG8gYnVpbGQgYW4gTFRWKQojZW5kaWYgLy8gSENGX1RBTExJRVNfTklDIC8gSENGX1RBTExJRVNfSENGCiNpZiAoSENGX1RBTExJRVMpICYgSENGX1RBTExJRVNfTklDCQkvL0hlcm1lcyB0YWxseSBzdXBwb3J0CiAgQ0ZHX0hFUk1FU19UQUxMSUVTX1NUUkNUCUlGQl9OSUNfVGFsbGllczsKI2VuZGlmIC8vIEhDRl9UQUxMSUVTX05JQwojaWYgKEhDRl9UQUxMSUVTKSAmIEhDRl9UQUxMSUVTX0hDRgkJLy9IQ0YgdGFsbHkgc3VwcG9ydAogIENGR19IQ0ZfVEFMTElFU19TVFJDVAkJSUZCX0hDRl9UYWxsaWVzOwojZW5kaWYgLy8gSENGX1RBTExJRVNfSENGCiNpZiBIQ0ZfRE1BCiAgLy91c2VkIGZvciBhIHBvb2wgb2YgZGVzdGluYXRpb25fYWRkcmVzcyBkZXNjcmlwdG9yL2J1ZmZlcnMsIHVzZWQgZHVyaW5nIHR4IGVuY2Fwc3VsYXRpb24gcG9pbnRzIHRvIHRoZQogIC8vZmlyc3QvbGFzdCBkZXNjcmlwdG9yIGluIHRoZSBkZXNjcmlwdG9yIGNoYWluLCBzbyB3ZSBjYW4gZWFzaWx5IHJlbW92ZSBhbmQgYXBwZW5kIGEgcGFja2V0LgogIERFU0NfU1RSQ1QJKklGQl9GaXJzdERlc2NbMl07CiAgREVTQ19TVFJDVAkqSUZCX0xhc3REZXNjWzJdOwogIERFU0NfU1RSQ1QJKklGQl9Db25maW5lZERlc2NbMl07CS8vIHBvaW50ZXJzIHRvIGRlc2NyaXB0b3IgdXNlZCBmb3IgaG9zdCByZWNsYWltIHB1cnBvc2VzLgogIGhjZl8xNgkJSUZCX0RtYVBhY2tldHM7CQkJLy8gSFJFR19FVl9bVFgvUlhdRE1BX0RPTkUgZmxhZ3MsIHJlcG9ydHMgRE1BIEZyYW1lIGF2YWlsYWJpbGl0eSB0byBNU0YKI2VuZGlmIC8vIEhDRl9ETUEKI2lmIChIQ0ZfRVhUKSAmIEhDRl9FWFRfSU5UX1RYX0VYCiAgaGNmXzE2CQlJRkJfVHhGc1N0YXQ7CQkJLy8gVHggbWVzc2FnZSBtb25pdG9yaW5nCiAgaGNmXzE2CQlJRkJfVHhGc0dhcFsyXTsJCQkvLzs/bWFrZSB0aGlzIHJvYnVzdAogIGhjZl8xNgkJSUZCX1R4RnNTd1N1cDsKI2VuZGlmIC8vIEhDRl9FWFRfSU5UX1RYX0VYCiAgaGNmXzE2CQlJRkJfTWFnaWM7CQkJCS8qICJNYWdpYyIgc2lnbmF0dXJlLCB0byBoZWxwIHRoZSBkZWJ1Z2dlciBpbnRlcnByZXQgYSBtZW1vcnkgZHVtcAoJCQkJCQkJCQkJICogYWxzbyB0aGUgbGFzdCBmaWVsZCBjbGVhcmVkIGF0IGhjZl9jb25uZWN0CgkJCQkJCQkJCQkgKi8KI2lmIChIQ0ZfRVhUKSAmIEhDRl9FWFRfSUZCX1NUUkNUCQkvLyBmb3IgdXNhZ2UgYnkgdGhlIE1TRgogIHZvaWQgRkFSCSAgICpJRkJfTVNGU3VwOwkJCQkvLyBwb2ludGVyIGZvciBhcmJpdHJhcnkgdXNlIGJ5IHRoZSBNU0YKI2VuZGlmIC8vIEhDRl9FWFRfSUZCX1NUUkNUX0VYVAp9IElGQl9TVFJDVDsKCnR5cGVkZWYgSUZCX1NUUkNUKglJRkJQOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKiogICBXIEMgSSAgICBGIFUgTiBDIFQgSSBPIE4gUyAgICBQIFIgTyBUIE8gVCBZIFAgRSBTICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpFWFRFUk5fQyBpbnQJCSBoY2ZfYWN0aW9uCQkJKElGQlAgaWZicCwgaGNmXzE2IGNtZCApOwpFWFRFUk5fQyBpbnQJCSBoY2ZfY29ubmVjdAkJKElGQlAgaWZicCwgaGNmX2lvIGlvX2Jhc2UgKTsKI2lmIChIQ0ZfRU5DQVApICYgSENGX0VOQ19TVVAKRVhURVJOX0MgaGNmXzggCQkgaGNmX2VuY2FwCQkJKHdjaV9idWZwIHR5cGUgKTsKI2VuZGlmIC8vIEhDRl9FTkNfU1VQCkVYVEVSTl9DIGludAkJIGhjZl9nZXRfaW5mbwkJKElGQlAgaWZicCwgTFRWUCBsdHZwICk7CkVYVEVSTl9DIGludAkJIGhjZl9zZXJ2aWNlX25pYwkoSUZCUCBpZmJwLCB3Y2lfYnVmcCBidWZwLCB1bnNpZ25lZCBpbnQgbGVuICk7CkVYVEVSTl9DIGludAkJIGhjZl9jbnRsCQkJKElGQlAgaWZicCwgaGNmXzE2IGNtZCApOwpFWFRFUk5fQyBpbnQJCSBoY2ZfcHV0X2luZm8JCShJRkJQIGlmYnAsIExUVlAgbHR2cCApOwpFWFRFUk5fQyBpbnQJCSBoY2ZfcmN2X21zZwkJKElGQlAgaWZicCwgREVTQ19TVFJDVCAqZGVzY3AsIHVuc2lnbmVkIGludCBvZmZzZXQgKTsKRVhURVJOX0MgaW50CQkgaGNmX3NlbmRfbXNnICAgICAgIChJRkJQIGlmYnAsIERFU0NfU1RSQ1QgKmRwLCBoY2ZfMTYgdHhfY250bCApOwojaWYgSENGX0RNQQpFWFRFUk5fQyB2b2lkCQkgaGNmX2RtYV90eF9wdXQgCShJRkJQIGlmYnAsIERFU0NfU1RSQ1QgKmQsIGhjZl8xNiB0eF9jbnRsICk7CkVYVEVSTl9DIERFU0NfU1RSQ1QqIGhjZl9kbWFfdHhfZ2V0CQkoSUZCUCBpZmJwICk7CkVYVEVSTl9DIERFU0NfU1RSQ1QqIGhjZl9kbWFfcnhfZ2V0CQkoSUZCUCBpZmJwICk7CkVYVEVSTl9DIHZvaWQJCSBoY2ZfZG1hX3J4X3B1dAkJKElGQlAgaWZicCwgREVTQ19TVFJDVCAqZCApOwojZW5kaWYgLy8gSENGX0RNQQojaWYgKEhDRl9BU1NFUlQpICYgSENGX0FTU0VSVF9MTktfTVNGX1JUTgpFWFRFUk5fQyB2b2lkCQkgbXNmX2Fzc2VydAkgCQkodW5zaWduZWQgaW50IGxpbmVfbnVtYmVyLCBoY2ZfMTYgdHJhY2UsIGhjZl8zMiBxdWFsICk7CiNlbmRpZiAvLyBIQ0ZfQVNTRVJUX0xOS19NU0ZfUlROCgojZW5kaWYgIC8vIEhDRl9ICgo=